0

我有一个问题Ajax submit。我有一个 main View,我在其中渲染 aPartialView并在最后一个内部加载另一个PartialView。像这样的东西:

  • 主视图

    • 元素列表 -> PartialView1

      • 在1中创建新元素 -> PartialView2PartialView

我正在使用AjaxBeginForm替换和更新选项:

 @using (Ajax.BeginForm("Create", "MyController", 
      new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = "form0", HttpMethod = "POST" }))

我的问题是第一次提交效果很好。它保存新元素并重新渲染PartialView1 (它更新我的列表)。如果想再次提交,它会将我重定向到PartialView1。

为什么会发生这种情况,我的代码有什么问题?我该怎么做 ?

这是我的控制器操作

    [HttpPost]
    public PartialViewResult Create(Model viewModel)
    {
        viewModel.Save(viewModel.FormModel);

        var newViewModel = new DefaultViewModel(viewModel.xID,viewModel.yID);

        return PartialView("_DefaultPartialView", newViewModel);

    }

没关系,我的操作返回PartialView? 它应该是类型JsonResult

PartialView1

@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>
}

谢谢你。

更新:

我解决了这个问题(这是一个非常新手的错误)。我明天会发布我的答案,因为现在有点晚了,我需要睡觉!

4

1 回答 1

3

因此,首先,当您进行 Ajax 调用时,请确保包含您需要的所有内容。这里我的意思是:

  • 一定要<add key="UnobtrusiveJavaScriptEnabled" value="true"/>在你的 webconfig 中有。

  • 确保您已将脚本包含在页面中。

  • 如果您使用的是最新版本,则jQuery需要live在.onunobtrusive script

顺便说一句,如果你有上面提到的问题,这是我第一次做的(现在改变了,因为它不是一个很好的解决方案):

 MainView

 @using (Ajax.BeginForm("Create", "MyController", 
  new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = "form0", HttpMethod = "POST" }))
    {
     RenderPartial1

         RenderPartial1.2
     }


     RenderPartial2
     ..
     RenderPartialN

正如你所看到的,我把 I 放在了AjaxBeginForm外面,放在了. 这种方法不太好,因为如果你需要 2 个表格,你会怎么做?Partial1.2submitMainView

最后我退出使用AjaxBeginFormHtmlBeginFormajax postfrom一起使用javascript

于 2013-02-19T07:59:41.253 回答