我有以下代码,我试图从常规页面更改为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。
答案 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 );
}