目前是希望可以在View上的number輸入值(預想是工號),然後當這欄位有onchange
時,我可以將輸入值帶到Controller,並在Controller透過連資料庫尋找相關資料(找工號的姓名等資訊),但我目前尚未實作出後面(先寫死)。
備註,在這頁所有事情都做完以後,才送出資料(Submit)
目前輸入值到number中,沒有任何動作,請問我該如何去透過ajax
將輸入值帶到Controller,並回傳結果到頁面上的欄位呢?
[View]
<script type="text/javascript">
$("#myAjaxButton").click( function (event) {
$.ajax({
url: "@Url.Action("TestFunc", "Test")",
data: { number = $("#number").val() },
cache: false,
type: "POST",
success: function (data, textStatus, jqXHR) {
$("#name").val(data);
},
error: function (jqXHR, textStatus, errorThrown) {
alert("Found error when using Ajax!!");
}
});
});
</script>
@using (Html.BeginForm("Index","Test",FormMethod.Post,new {})){
<div class="form-horizontal">
<div class="form-group">
<div class="col-md-10">
<p>Id : </p>
<input type="text" id="number" required />
<input type="text" id="name"/>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="button" id="myAjaxButton" value="search1" class="btn btn-default" />
<input type="submit" value="search" class="btn btn-default" />
</div>
</div>
</div>
}
[Controller]
[HttpPost]
public JsonResult TestFunc(string number) {
string name = "";
if (number == "A12345")
{
name = "Annie";
};
return Json(name);
}
首先,您可以先在Controller製作出一個簡易的API並回傳Json,既然是回傳Json那就使用JsonResult就好,不過ActionResult也可以
[HttpPost]
public JsonResult TestFunc(string number) {
string hashNumber = number;
string name = "";
if (number == "A12345")
{
name = "Annie";
};
return Json(name);
}
接著準備對應的Javascript
注: 建議您不要寫在onchange
裡面,不然您每輸入一個字都會執行一次Ajax
感謝Firecold大糾正
onchange 要input unfocus才會觸發
$("#myAjaxButton").click( function () {
$.ajax({
url: "@Url.Action("TestFunc", "Test")",
data: { "number": $("#number").val() }, // 變數名稱必須跟Action裡的相同
cache: false,
type: "POST",
success: function (data, textStatus, jqXHR) {
$("#name").val(data);
},
error: function (jqXHR, textStatus, errorThrown) {
alert("Found error when using Ajax!!");
// 記得要加入error handler不然很難除錯XDDD
}
});
});
YoChen,目前調整程式碼後,嘗試了以下方式,但看起來都未觸發事件,請問還可以怎麼調整呢? 非常謝謝您!
.change
),輸入值未觸發事件myAjaxButton
,並調整觸發方式為(改為.cliclk
),但目前按下按鈕myAjaxButton
,未觸發事件Controller
的方法為JsonResult
,未觸發事件目前程式碼更新於發問中~
請確認您Ajax裡的data有沒有填錯
data: { "number": $("#number").val() },
// 變數名稱必須跟Action裡的相同
不好意思!我剛剛太慢送出發問...
有的,我有確認其一致性,只是不知道為什麼它都不會做觸發,目前我中斷點是下在Controller裡面
如果都沒有填錯的話,您可能要在瀏覽器點開F12看看有沒有錯誤訊息
把你的 script block 移到 html dom block 後面你覺得如何
但是 json 一定是不能寫成 key=value
的型式的
所以一定是 key: value
或許可以看一下
最後到 html 的 code 長怎樣
如同DragonH大所說,您可以先改成key: value
,再看看有什麼錯誤訊息~
有的,有嘗試將=
改成:
,console就沒有錯誤了,只是一樣不會觸發,我再試試看,不好意思,耽誤您們這麼多時間> <
我還是覺得是順序的問題就是
不然可以試試 $(document).ready() {}
把 function 寫在裡面試試
哇,感覺這一手有突破盲點~XDDD
有可能是順序的問題.
其實也不能說是 "順序" 的問題
是因為 dom 還沒 完全 load 的時
js 根本就抓不到 dom
onchange 要input unfocus才會觸發喔
Ajax通常是回傳Json字串,
然後前端解析字串再做相應的處理
[HttpPost]
public ActionResult TestFunc(string number) {
string result = xxx;
//中間省略
return Json(result);
}
類似這樣的,
常常會用到Newtonsoft.Json
function Show() {
省略...
}
<input type="text" id="number" **onkeyup="Show(this.id)"** required />
這樣應該就可以達到你的要求了。
但是...我會覺得用 這個,可以避免你把自己的server跟資料庫弄死