Ajax.BeginForm OnSuccess没有触发

时间:2014-10-14 13:31:09

标签: c# asp.net-mvc ajax.beginform

我正在使用这个局部视图

@model CreateConfigEntityModel

<div class="row">
@using (Ajax.BeginForm("AddElement", "MerchantSites", new { merchantId = @Model.MerchantId }, new AjaxOptions
{
  HttpMethod = "POST",
  OnSuccess = "alert('ok')"
},
new { id = "addConfigForm" }
))
{
  @Html.LabelFor(m => m.EntityName)
  @Html.TextBoxFor(m => m.EntityName)
  @Html.ValidationMessageFor(m => m.EntityName)

  @Html.LabelFor(m => m.DefaultValue)
  @Html.TextBoxFor(m => m.DefaultValue)
  @Html.ValidationMessageFor(m => m.DefaultValue)

  <input type="submit" value="Ajouter" class="tiny button" /> 
}
</div>

控制器

public JsonResult AddElement(CreateConfigEntityModel model)
{
    if (ModelState.IsValid)
    {
        _merchantSitesManager.AddEntity(model.EntityName, model.DefaultValue);
        return Json(new { code = 1 }, JsonRequestBehavior.AllowGet);
    }
    else
        return Json(new { code = 0 }, JsonRequestBehavior.AllowGet);
}

这是提交表单后显示的内容(项目正确添加)

enter image description here

不确定我做错了什么。

使用jQuery JavaScript Library v2.1.1

我的web.config

<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />

我正在调用我的部分视图

@{ Html.RenderPartial("_CreateConfigEntity", new CreateConfigEntityModel(Model.MerchantId)); }

4 个答案:

答案 0 :(得分:22)

假设您有一个全新的项目,您需要执行以下操作才能使其正常运行。 ASP.NET MVC模板支持开箱即用的不引人注目的AJAX:

  1. 将Nuget中的"Microsoft.jQuery.Unobtrusive.Ajax"包添加到您的项目中。您可以通过右键单击项目并选择&#34; Manage Nuget Packages来执行此操作。&#34;
  2. 添加&#34; jquery.unobtrusive-ajax.js&#34;到你的页面。如果您正在使用&#34;捆绑&#34; System.Web.Optimization中的一个简单方法是将它添加到jQuery包中:

    bundles.Add(new ScriptBundle("~/bundles/jquery")
        .Include("~/Scripts/jquery-{version}.js")
        .Include("~/Scripts/jquery.unobtrusive-ajax.js"));
    

    您还可以添加指向脚本的<script>标记。

  3. 假设页面正在加载jQuery jquery.unobtrusive-ajax.js,那么您发布的代码应该可以正常工作。

答案 1 :(得分:1)

添加对以下js库的引用:

  • jquery- {version} .min.js
  • MicrosoftAjax.js
  • MicrosoftMvcAjax.js
  • jquery.validate.min.js
  • jquery.validate.unobtrusive.js
  • jquery.unobtrusive-ajax.js

答案 2 :(得分:0)

是的,我知道为什么没有调用这些方法,你总是需要引用ajax不显眼的文件: jquery.unobtrusive-ajax.min.js

答案 3 :(得分:0)

除了其他答案,还值得检查您的web.config文件是否启用了验证和不干扰组件:

<appSettings>
...
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
...
</appSettings>