我在这里几次被问过这个问题,但我看到的解决方案并不通用,它们与具体代码有关..
我需要纠正以前的开发人员完成的工作,代码中的ajax调用流是错误的
在我的情况下,我有以下观点:
1.Index (Main View)
2.ParentCategoryList (partial View inside Index)
3. AddChild (partial View inside ParentCategoryList )
4. childCategorytree (Seperate View )
问题是来自第二个嵌套视图(AddChild),当我点击保存按钮时,httpost方法正在调用两次
我的索引视图
<div>
<div class="content" id="divparent">
</div>
<div class="content" id="dvChild">
</div>
</div>
其脚本
@section scripts{
<script type="text/javascript">
$('document').ready(function () {
//------------
$.get('@Url.Action("ParentCategoryList", "List")', function (data) {
$("#divparent").html("");
$("#divparent").html(data);
});
})
function addnewchild(url) {
$.get(url, function (data) {
$("#dvChild").html("");
$("#dvChild").html(data);
});
}
</script>
}
索引内的第一部分视图(ParentCategoryList.cshtml)
@foreach (Bmsa.UI.Models.ListsResultModel data in Model)
{
<tr> <td><a onclick="addnewchild('@Url.Action("AddChild",
"List", new { id = @data.listID })')" >
</a> </td></tr> } </tbody> </table>
ParentCategoryList中的第二个嵌套部分视图
@using (Ajax.BeginForm("AddChild", "List", new AjaxOptions
{
HttpMethod = "POST",
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "dvChild"
}))
{
<div > <input type="submit" value="Save" /></p></div>}
和控制器方法
public ActionResult ParentCategoryList()
{
//Code
return PartialView("ParentCategoryList", categoryList); }
//获取加载此视图的操作
public ActionResult AddChild(int id)
{
ViewBag.ParentID = id;
ListsAddModel addchild = new ListsAddModel();
addchild.parentListId = id;
return PartialView("AddChild", addchild);
}
[HttpPost] (**this method is calling twice--this is the problem** )
public ActionResult AddChild(ListsAddModel model,int id)
{
//Code
return RedirectToAction ("ChildCategoryListTree", new { id = model.parentListId });
}
我无法阻止此方法调用两次。我在$ .ajax调用中尝试了e.preventDefault(),但它无效...
我试过最小化代码,我认为问题出在RedirectToAction中,但我不确定
任何帮助将不胜感激