大家好我有问题,我不明白为什么会这样。
由于某种原因,我第二次提交时,我的ajax电话是双重发布。
我的观点包含:
@using (Ajax.BeginForm("Create", "BasketPage", new AjaxOptions
{
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "myDiv",
}))
{
<textarea id="comment" name="comment"> </textarea> <br />
<input type="submit" class="btn btn-blue" value="Comment" />
}
调用的BasketPage控制器操作如下所示:
public PartialViewResult Create(BasketPage currentPage, string comment)
{
Comment newComment = new Comment()
{
Username = User.Identity.Name,
Text = HttpUtility.HtmlEncode(comment),
PageID = currentPage.PageLink.ID
};
commentRepository.Save(newComment);
var model = new BasketListModel(currentPage)
{
CommentsList = commentRepository.GetComments(currentPage.PageLink)
};
return PartialView("_Comment", model);
}
问题情景:
如果我用常规的@ Html.BeginForm替换Ajax.beginform,则只调用一次Save方法。
我错过了什么?
答案 0 :(得分:5)
可能是你将不引人注目的JavaScript库包含在页面中两次。
检查并删除捆绑配置或附带的<script>
标记中的所有重复项。
答案 1 :(得分:0)
之前我遇到过这个问题,我有一个部分视图,数据看起来与此类似
<div id="OuterDiv">
@using (Ajax.BeginForm("ProcessStuff", "Stuff", new AjaxOptions { HttpMethod = "POST", InsertionMode = InsertionMode.Replace, UpdateTargetId = "divWrapper" }, new { @class = "form-horizontal", @id = "frmProcess" }))
{
<div ="divWrapper">
<--add some controls --!>
</div>
}
<div/>
我的控制器让代码再次返回视图:
[HttpPost]
public ActionResult ProcessStuff(WhateverNamespace.Models model)
{
//do some processing
return PartialView("_stuff", model);
}
问题在于它自己,如果仔细观察,我的 UpdateTargetId 在ajax表单内,导致第二篇文章返回部分视图并将Ajax表单放在已经存在的Ajax中形成。这导致从第二个开始的所有请求多次发布。
此处的解决方案是将 UpdateTargetId 更改为位于ajax表单之外的控件,在本例中为“OuterDiv”