2009-09-11 60 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

相关问题