目前是希望可以在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跟資料庫弄死