2009-09-11 63 views
0

我有以下代碼,我試圖從常規頁面更改爲ajax頁面,所以當我提交表單時,我只刷新LInkList DIV。我更改使用線上使用Ajax.BeginForm它似乎整個頁面刷新,甚至認爲我正在使用Ajax.Beginform

這裏是查看代碼:

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
<div id="LinkList"> 
    <% Html.RenderPartial("TestUserControl", Model); %> 
</div> 
<%using (Ajax.BeginForm("AddNewLink", "Test", new AjaxOptions { UpdateTargetId = "LinkList" })) 
    { %> 
<fieldset style="text-align: left"> 
    <legend>Add New Link</legend> 
    <table> 
     <tr> 
      <td> 
       Url: 
      </td> 
      <td> 
       <input style="width: 500px" type="text" name="url" /> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       <input type="submit" value="Add Link" name="submit" /> 
      </td> 
     </tr> 
    </table> 
</fieldset> 
<% } %> 

這裏是控制器代碼:

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult AddNewLink(FormCollection collection_) 
    { 
     string url = collection_["url"].ToString(); 

     Test test = new Test(); 
     test.Name = DateTime.Now.ToString(); 

     if (Request.IsAjaxRequest()) 
     { 
      return PartialView("TestUserControl", test); 
     } 

     return View("Index", test); 
    } 

任何想法,爲什麼整個頁面將在此刷新情況,而不是隻是什麼在div標籤? Request.IsAjaxRequest()總是返回false。

回答

5

整個頁面正在刷新還是整個頁面都在您的DIV中重新呈現。如果前者,我懷疑你可能在頁面上有一個javascript錯誤,這將使你的AJAX處理可操作並導致它完成一個完整的帖子。請使用IE8調試或Firefox/Firebug進行檢查。您需要在使用AjaxHelper方法的每個頁面上都包含MicrosoftAjax.js和MicrosoftMvcAjax.js。

如果是後者,並且我認爲你最終會遇到這個問題,那是因爲無論你是通過AJAX還是通過完整的帖子來獲取頁面,都會返回整個視圖。將一些代碼添加到您的方法中,以僅返回通過AJAX進行請求時要替換的部分視圖。

var container = GetContainer(ds1); 
if (request.IsAjaxRequest()) 
{ 
     return PartialView("LinkList", container); 
} 
else 
{ 
     return View("Index", container); 
} 
+0

我把這個和IsAjaxRequest()返回false。有任何想法嗎? – leora 2009-09-12 01:26:38

+0

您是否在客戶端檢查了導致您的JavaScript提交代碼無法運行的JavaScript錯誤。如果你的javascript壞了,它會做一個完整的帖子。 – tvanfosson 2009-09-12 01:29:21

+0

我剛剛創建了一個新的testController,並且測試視圖沒有javascript,並且isajaxrequest仍然返回false。我已更新問題 – leora 2009-09-12 02:14:13

相關問題