asp.net-mvc-3 - MVC3 - Razor,Ajax.BeginForm - 客户端 - OnBegin

标签 asp.net-mvc-3 razor ajax.beginform

当我点击提交按钮时,我直接进入我的操作。以下 2 种情况没有发生:

  1. 此时未调用我的客户端 beginForm 方法。我想要的。
  2. 即使我的模型具有表单输入,Request.IsAjaxRequest 也是 false

试图找到这个问题的答案。相同的代码在 MVC2 中工作,所以我一定在这里遗漏了一些东西。

引用了以下2个MS js文件:

<!-- MS AJAX -->
<script type="text/javascript" src="/Scripts/MicrosoftAjax.js"></script>
<script type="text/javascript" src="/Scripts/MicrosoftMvcAjax.js"></script>

表单代码:

@{
        using (Ajax.BeginForm(ActionNames.Index, ControllerNames.CustomerSearch, new {Area = ""}, new AjaxOptions
                                                                                                      {
                                                                                                          HttpMethod = "Post",
                                                                                                          OnBegin = "CustomerSearch.beginForm",
                                                                                                          OnSuccess = "CustomerSearch.successForm"
                                                                                                      }, new {id = "CustomerSearchForm"}))
        {

... form items ...
}
}

页面上显示的表单:

<form action="/CustomerSearch" data-ajax="true" data-ajax-begin="CustomerSearch.beginForm" data-ajax-method="Post" data-ajax-success="CustomerSearch.successForm" id="CustomerSearchForm" method="post">

... Other Form Items ...
<input type="image" src="/App_Themes/Main/Images/ResponseAction/Buttons/btn_submit.gif" alt="Submit" id="SubmitButton" />
</form>

这是我的 CustomerSearch.js,页面加载警报(2)显示得很好:

var CustomerSearch = {
    enums: {
        buttonId: "SubmitButton",
        searchResultsContainerId: "CustomerSearchResults"
    },
    beginForm: function () {
        alert(1);
        var $button = $("#" + CustomerSearch.enums.buttonId);
        jMessage("Processing request...", $button, true, false);
        return true;
    },
    successForm: function (context) {
        var $button = $("#" + CustomerSearch.enums.buttonId);
        var $searchResults = $("#" + CustomerSearch.enums.searchResultsContainerId);
        var data = context.get_data();

        jMessageHide();
        $searchResults.html(data).fadeIn(500);
    }
};

alert(2);

我在 web.config 中启用的不引人注目的 javascript 设置为 true:

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

最佳答案

With MVC3不显眼的 Ajax 助手:

  • Ajax.ActionLink
  • Ajax.RouteLink
  • Ajax.BeginForm
  • Ajax.BeginRouteForm

正在使用jquery.unobtrusive.ajax.js文件。

因此您需要包含该 js 文件而不是 MicrosoftAjax 文件 (MicrosoftAjax 文件在 MVC3 中已弃用,并且未随 MVC4 beta 一起提供):

<script type="text/javascript" src="/Scripts/jquery.unobtrusive-ajax.min.js"></script>

关于asp.net-mvc-3 - MVC3 - Razor,Ajax.BeginForm - 客户端 - OnBegin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10252891/

相关文章:

c# - DataReader 关联在哪里?如何关闭它?

c# - 使用 ViewData 将对象传递给局部 View

asp.net-mvc - 如何从Ajax表单中在asp.net mvc中提交下拉列表

c# - Ajax.BeginForm OnSuccess 未触发

asp.net - 如何防止 Ajax.BeginForm 加载新页面?

asp.net-mvc - 折叠 cshtml 中的 C# block 并保存

deployment - 初始化字符串的格式不符合从索引 0 开始的规范

c# - 获取 Web 应用程序程序集名称,无论当前正在执行的程序集如何

asp.net-mvc - 从 [HttpGet] 操作重定向到 [HttpPost] 操作 - MVC3

asp.net-mvc-3 - 无法使用 NuGet PagedList ASP.NET MVC# View