Ajax.BeginForm无法正常工作

时间:2013-02-17 22:27:41

标签: ajax asp.net-mvc-4

我对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>
}

谢谢。

更新

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

1 个答案:

答案 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 postjavascript {{1}}一起使用。