2011-06-09 70 views
0

這是我的Test.cshtml:其中的jquery-1.4.4.min.js由佈局包括ASP.Net MVC - Ajax.BeginRequest()不產生AJAX請求

@using(Ajax.BeginForm("Test", new AjaxOptions())) 
{ 
    <p> 
     Some String: <input name="someString" type="text" /> 
    </p> 
    <button type="submit">Submit</button> 
} 

我的控制器有以下兩個動作:

public ActionResult Test() 
{ 
    return View(); 
} 
[HttpPost] 
public ActionResult Test(string someString) 
{ 
    if (Request.IsAjaxRequest()) 
     return Json("Okey-dokey"); 
    return View(); 
} 

看來,當我點擊提交,它總是一個邊後衛後,Request.IsAjaxRequest()是不正確的!

什麼給?

+1

您是否在佈局頁面中包含腳本jquery.unobtrusive-ajax.js? – counsellorben 2011-06-09 21:16:03

+0

@counsellorben啊,那會是問題。發佈作爲答案,我會標記它給你。 – 2011-06-09 21:21:06

回答

1

喬治,

請確保您在您的頁面佈局腳本jquery.unobtrusive-ajax.js。

counsellorben

1

我在代碼示例中看不到ajax功能。

+0

Ajax.Begin()表單應該做什麼?如果啓用javascript,我認爲它應該劫持表單提交過程。我錯了嗎? – 2011-06-09 20:53:50

+0

您發佈了Html.BeginForm()? – jfar 2011-06-09 20:54:47

+0

你說得對,我做過,這是一個錯字,Ajax.BeginForm仍然表現相同。我已經更新了我的問題 – 2011-06-09 21:07:18

1

您需要使用像這樣的東西來獲得Ajax功能

using (Ajax.BeginForm("Test", "ControllerName" ,null, 
     new AjaxOptions { OnComplete = "FunctionToCallOnSuccess" })) 
+0

對不起,我錯誤輸入了,我使用了Ajax.BeginForm() - 它仍然作爲完整的回發請求處理 – 2011-06-09 21:08:59

0

它後,確實如此。 你應該使用AJAX調用,就像這樣:

$(function(){ 
    $("#myButton").click(function(){ 
     $.getJSON("/Controller/Test", {someString: $("#someString").val()}, function(data){ 
      alert(data); 
     } 
    }); 
}); 

,並在您的形式:

<p> 
    Some String: <input name="someString" id="someString" type="text" /> 
</p> 
<button type="button">Submit</button> 

這應該工作。

+1

我同意這會起作用,但這不是使用不顯眼的點JavaScript提供的Ajax.BeginForm。另外請注意,如果您打算返回任何安全數據,那麼對此類使用GET可能會暴露JSON劫持安全漏洞。 – 2011-06-09 21:04:45

+0

我同意你的意見。對不起。 – nrodic 2011-06-09 21:11:56