即使我使用的是Ajax.Beginform,似乎整个页面都很清爽

时间:2009-09-11 23:56:31

标签: asp.net-mvc ajax

我有以下代码,我试图从常规页面更改为ajax页面,所以当我提交表单时,我只刷新LInkList div。我将使用行更改为使用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。

1 个答案:

答案 0 :(得分: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 );
 }