我的Person模型有一个Index,一个GET Create和POST Create操作。我在父视图中显示索引,因此它被称为ChildAction。
我希望能够做的是将GET Create作为ChildAction调用到同一父视图或Index视图中。然后,当提交“创建”表单时,我希望刷新索引。
我该如何实施?我一直在玩这个使用Ajax.BeginForm但它似乎多次发布到Create动作所以我认为我的尝试是有缺陷的。我的主要问题是在Create POST成功时刷新Index操作。创建POST应该返回什么?
所有帮助和建议表示赞赏。
答案 0 :(得分:1)
我不知道我是否完全了解你的概率,但我认为这可能有助于你 喜欢你用 成功:功能(数据){...一些代码...} 你还必须在这里再使用一个属性
onComplete:function(data){... some code ...}
现在只需在ajax调用完成后编写您想要执行的代码。 但是在完整的函数中写下它
答案 1 :(得分:0)
以下是如何设置的:
public class HomeController : Controller
{
public ActionResult MainAction()
{
return View();
}
[ChildActionOnly]
public ActionResult Index()
{
return PartialView();
}
[ChildActionOnly]
public ActionResult Create()
{
return PartialView();
}
[HttpPost]
public ActionResult ProcessCreate(SomeViewModel model)
{
return PartialView("Index");
}
}
和相应的观点:
~/Views/Home/MainAction.cshtml
:
<div>
This is the main view
</div>
<div id="indexContainer">
@{Html.RenderAction("Index");}
</div>
~/Views/Home/Index.cshtml
:
<div>
This is the index view @DateTime.Now.ToLongTimeString()
</div>
<div>
@{Html.RenderAction("Create");}
</div>
~/Views/Home/Create.cshtml
:
@using (Ajax.BeginForm("ProcessCreate", "Home", new AjaxOptions { UpdateTargetId = "indexContainer" }))
{
<button type="submit">OK</button>
}
另外,不要忘记为Ajax。*帮助程序包含jquery.unobtrusive-ajax.min.js
脚本:
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
您会注意到我已经重命名了Create POST操作,否则当在表单回发后调用Html.RenderAction帮助程序时,它将再次执行POST操作,您将以无限循环结束。