2011-09-28 30 views
0

我剛剛從一個asp.net mvc 2應用程序的工作複製了一些代碼。現在我正在嘗試在asp.net mvc 3中,它不會調用控制器上的保存方法?jquery Post在asp.net mvc 3中不起作用?

控制器:

[HttpPost] 
    public JsonResult save(string inputdata) 
    { 
     return Json(new { Result = string.Format("From the controller - you have clicked the GO-button ! ") }, JsonRequestBehavior.AllowGet); 
    } 

觀點:

<button id="but">go</button> 
<div id=result></div> 
<script type="text/javascript"> 

    $(document).ready(

    $("#but").click(
     function() { 
      $.ajax({ 
       url: "/Home/save", 
       dataType: "json", 
       type: 'POST', 
       data: "test", 
       success: function (result) { 
        $("#result").html(result.Result); 
       } 
      }); 

     } 
    ) 

    ); 

</script> 

回答

3

你沒有正確地傳遞數據。動作參數被稱爲inputdata。所以,你應該在data哈希AJAX請求使用同一個名字:

$.ajax({ 
    url: '/Home/save', 
    dataType: 'json', 
    type: 'POST', 
    data: { inputdata: 'test' }, 
    success: function (result) { 
     $('#result').html(result.Result); 
    } 
}); 

而且從來沒有硬編碼的URL在JavaScript,請始終使用的網址助手或您的應用程序將完全停止工作,當你部署因的可能性有一個虛擬目錄名稱:

$.ajax({ 
    url: '@Url.Action("save", "home")', 
    dataType: 'json', 
    type: 'POST', 
    data: { inputdata: 'test' }, 
    success: function (result) { 
     $('#result').html(result.Result); 
    } 
}); 

,你有你的代碼的另一個問題是,你是不是取消按鈕,這意味着,如果這是一個動作鏈接或提交按鈕AJAX請求的默認操作可能永遠有時間在瀏覽器重定向之前執行。

此外,您不需要將JSON指定爲dataType,因爲jQuery具有足夠的智能性,可以從服務器發送的Content-Type響應頭中推斷出這一點。

所以最終版本應該是沿着線的東西:

<script type="text/javascript"> 
    $(function() { 
     $('#but').click(function() { 
      $.ajax({ 
       url: '@Url.Action("save", "home")', 
       type: 'POST', 
       data: { inputdata: 'test' }, 
       success: function (result) { 
        $('#result').html(result.Result); 
       } 
      }); 
      return false; 
     }); 
    }); 
</script>