2

[送信]ボタンをクリックすると、直接アクションに移動します。次の2つは発生していません:

  1. 現在、クライアント側のbeginFormメソッドは呼び出されていません。どちらが欲しいか。
  2. モデルにフォーム入力があるにもかかわらず、Request.IsAjaxRequestがfalse

この問題の答えを見つけようとしています。同じコードがMVC2でも機能するので、ここで何かが欠けているに違いありません。

次の2つのMSjsファイルが参照されます。

<!-- 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です。ページの読み込みでalert(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);

控えめなJavaScriptを有効にすると、web.configでtrueに設定されます。

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

1 に答える 1

2

MVC3では、目立たないAjaxヘルパー:

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

ファイルを使用していjquery.unobtrusive.ajax.jsます。

したがって、MicrosoftAjaxファイルの代わりにそのjsファイルを含める必要があります(MicrosoftAjaxファイルはMVC3で非推奨になり、MVC4ベータ版には付属していません)。

<script type="text/javascript" src="/Scripts/jquery.unobtrusive-ajax.min.js"></script>
于 2012-04-20T20:22:33.420 に答える