我对Ajax submit
有疑问。我有一个主View
,我在其中呈现PartialView
,在最后一个内部我加载了另一个PartialView
。像这样:
主视图
元素列表 - > PartialView
1
PartialView
内的PartialView
2 我正在使用AjaxBeginForm
替换和更新选项:
@using (Ajax.BeginForm("Create", "MyController",
new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = "form0", HttpMethod = "POST" }))
我的问题是提交第一次运行得很好。它保存新元素并重新呈现PartialView
1(它更新我的列表)。如果想再次提交,则会将我重定向到PartialView
1。
为什么我的代码中发生了这种情况以及出了什么问题?我该怎么做 ?
这是我的控制器操作:
[HttpPost]
public PartialViewResult Create(Model viewModel)
{
viewModel.Save(viewModel.FormModel);
var newViewModel = new DefaultViewModel(viewModel.xID,viewModel.yID);
return PartialView("_DefaultPartialView", newViewModel);
}
我的操作可以返回PartialView
吗?它应该是JsonResult
类型的?
PartialView
1 :
@using (Ajax.BeginForm("CreateBehaviorLog", "BehaviorLog", new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = "form0", HttpMethod = "POST" }))
{
@model DefaultViewModel
@Scripts.Render("~/bundles/jquery")
<h2>Title</h2>
{ Html.RenderPartial("PartialView2", Model.ModelForPartialView2); }
<div id="listOfELements">
@foreach(var item in Model.X)
{
--list--
}
</div>
}
谢谢。
更新
我解决了这个问题(这是一个非常新手的错误)。我明天会发布我的答案,因为现在有点晚了,我需要睡觉!
答案 0 :(得分:3)
因此,首先,当您进行Ajax调用时,请确保包含所需的所有内容。我的意思是:
请确保在您的网络配置中有<add key="UnobtrusiveJavaScriptEnabled"
value="true"/>
。
请确保您已将该脚本包含在页面中。
如果您使用的是最新的jQuery
,则需要在live
中使用on
更改unobtrusive script
功能。
顺便说一句,如果你有上面提到的问题,那就是我第一次做的事情(现在改了,因为它不是一个很好的解决方案):
MainView
@using (Ajax.BeginForm("Create", "MyController",
new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = "form0", HttpMethod = "POST" }))
{
RenderPartial1
RenderPartial1.2
}
RenderPartial2
..
RenderPartialN
正如您所看到的,我已将AjaxBeginForm
放在Partial1.2
之外的submit
MainView
之内AjaxBeginForm
。这种方法不太好,因为如果你需要2个表格,你会做什么呢?
最后,我使用HtmlBeginForm
退出,并使用ajax post
与javascript
{{1}}一起使用。