首页 文章

MVC3 - Razor,Ajax.BeginForm - 客户端 - OnBegin

提问于
浏览
2

当我单击提交按钮时,我直接转到我的操作 . 以下2个没有发生:

  • 此时未调用我的客户端beginForm方法 . 我想要的 .

  • 即使我的模型具有表单输入,Request.IsAjaxRequest也是假的

试图找到这个问题的答案 . 相同的代码在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"/>

1 回答

  • 2

    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>
    

相关问题