0

私が施設のセットを持っているとしましょう。各施設は父親が誰であるかを知っており、施設は多くの子供を持つことができます。今、私はこの問題のために一連のカスケード ドロップダウンを作成したので、最初に親を持たないものを見つけます (場合によっては階層 0)。ユーザーが項目を選択すると、2 番目のリストのリストにその子が読み込まれます (には子供がいます) など、階層 3 まで続きます。私のコードは次のとおりです。

インデックス.cshtml:

@model  WebUI.Controllers.IndexViewModel
<script src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")" type="text/javascript">  </script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>




 @Html.Partial("ParentEstablishments",Model)
 <div id="FirstHeritage">@Html.Partial("FirstHeritageChildren",Model)</div>
 <div id="SecondHeritage">@Html.Partial("SecondHeritageChildren",Model)</div>     

各部分ビューには、次のような ajax 形式があります。

@model WebUI.Controllers.IndexViewModel

@using (Ajax.BeginForm("SelectParent","Ticket",new   AjaxOptions{UpdateTargetId="FirstHeritage"}))
{

 <fieldset>
    <legend>Entidad departamental</legend>

    @Html.DropDownListFor( 
        m => m.SelectedParentId , 
        new SelectList( Model.AvailableParents , "EstablishmentId" , "Name" ) , 
        "[Por favor seleccione una entidad departamental]" 
    )
    <input type="submit" value="Select" />
</fieldset>
}

だから私が作成したいのは、ユーザーが必要なエンティティを選択したことをユーザーに知らせる送信ボタンであり、値のすべてのIDをチェックするコントローラーのメソッドを呼び出すことです。部分ビューをフォーム内に配置しようとしましたが、 ajaxフォームのすべての送信ボタンは、作成したフォームのメソッドを呼び出します.ajaxフォームに干渉せずにボタンを作成するにはどうすればよいですか?

4

2 に答える 2

1

基本的に、できません。AJAX フォームを AJAX フォームにするスクリプトは、submit イベントにバインドされるため、すべての送信がキャッチされます。

ASP.NET のすべての HTML ヘルパーとコントロールは、一般的なシナリオをカバーし、実際に一般的なシナリオにいるときに作業を楽にするためにあることを思い出してください。コードを「カスタム」にすればするほど (AJAX POST の代わりに通常の POST を実行する 2 つ目の送信ボタンなど)、必要な作業が増えます (そして、組み込みのヘルパーとコントロールを使用する必要がなくなります)。

通常のフォーム ( Html.BeginForm) を作成し、2 つの送信ボタンを追加し、AJAX バージョンでクリック イベントを添付して、POST を AJAX として自分で送信するだけです。

于 2013-04-01T19:46:39.200 に答える
1

以下のように Button を変更します。

<input type="button" value="Select" class="btnSubmit" />

以下のように Form タグを変更します。

@using (Ajax.BeginForm("SelectParent","Ticket", FormMethod.Post, 
                                                          new { id = "myForm" }))
{
}

以下のように Div を変更します。Controller の Action メソッドに対応する値を持つ属性を追加します。

<div id="FirstHeritage" attr-Url="@Url.Action("ActionName", "ControllerName", 
new { area = "AreaName" })"></div>

今はJqueryです。以下の手順に従ってください。

  1. 部分ビューをロード
  2. Div 属性値を取得する
  3. Button イベントには On を使用します。
  4. Ajax リクエスト

JQuery

$(document).ready(function () {
    var FirstHeritage = $('#FirstHeritage');
    var url = FirstHeritage.attr('attr-Url');
    FirstHeritage.load(url, function () {
        var $form = $('#myForm');
        $.validator.unobtrusive.parse($form);
        $(document).on('click', '.btnSubmit', function () {
            if ($form.valid()) {
                $.ajax({
                    url: Url,
                    async: true,
                    type: 'POST',
                    beforeSend: function (xhr, opts) {

                    },
                    contentType: 'application/json; charset=utf-8',
                    complete: function () { },
                    success: function (data) {
                        $form.html(data);
                        $form.removeData('validator');
                        $form.removeData('unobtrusiveValidation');
                        $.validator.unobtrusive.parse($form);
                    }
                });
            }
        });
    });
});

これがあなたを助けることを願っています。

于 2013-04-02T07:25:41.403 に答える