0

ユーザー作成ページがあります。現在、システム内のすべての現在のユーザーを含むテーブルがリストされています。新しい作成ボタンをクリックできます-これは、コントローラーメソッドを呼び出して部分ビューを返し、すべてのフィールド、つまり名、姓などを含む新しいモーダルjQueryダイアログボックスをロードするjQuery ajax送信を行います。背景とこのダイアログ ボックスがモーダル ビューの画面の中央にあるため、優先されます。ユーザー名をクリックすると、同じメソッドが呼び出され、一意のユーザー ID が渡されるため、ダイアログ フォームは空白で読み込まれません。DB からユーザーの現在の詳細が読み込まれ、ユーザー ID として [削除] ボタンがありました。新規作成時にある保存とキャンセルだけでなく、ユーザーダイアログボックスにも追加されます。

問題について-以下のように部分ビューページを囲みました-ユーザーが行ったいくつかの選択に基づいて差分ドロップダウンボックスを表示/非表示にする必要があるため、部分ビューに独自のjsも追加しました。

@using (Html.BeginForm("UserAction", "Admin", FormMethod.Post, new { id = "userActionForm" }))
{
//Fields on the dialog box....
}

次にダイアログボックスに-ボタンがあります

<input id="DoDeleteUser" type="button" class="dialog-button" value="Delete User" style="margin: 5px" />

そして、私のページのJSファイルには次のものがあります:

         $('#DoDeleteUser').click(function (event) {
          //alert("Delete Button Pressed"); - In for debugging
        $('#userID').val($(event.target).attr("userId")); - get id value into hidden field on page
        $('action').val('Delete'); - put action string into hidden field on page
        $('#userActionForm).submit();

      });

    $('#userActionForm').submit(function () {

       var formData = $("#userActionForm").serializeArray();

        $.ajax({
                url: this.action,
                type: this.method,
                data: formData,
            success: function (result) {
                $('#dialogContainer').html(result);
            }

        });
       return false;
});

私のダイアログコンテナは、最初のページが読み込まれるのと同じコンテナであり、UserAction メソッドから戻ったときに「ユーザーが更新されました」または「ユーザーが削除されました」という単純なメッセージと、クリックすると全体が更新される [OK] ボタンで更新したいものです。ページ(メインテーブルが更新されるように)

次に、コントローラーに次のようなメソッドがあります。

   public ActionResult UserAction(UserModel model)
    {

        if (ModelState.IsValid)
        {
              if(model.Action == "Delete")

               //Go and do delete
               return PartialView ("UserActionSuccess", model);

          //close if etc etc

ただし、コントローラーの UserAction メソッドにブレークポイントを設定しましたが、[ユーザーの削除] ボタンまたは [ユーザーの保存] ボタンを押してもヒットしません。

4

2 に答える 2

0

フォーム データを含む投稿を送信していますが、UserAction にモデル (json オブジェクト) が必要です。代わりにパラメーターを使用して、フォーム入力に一致させる必要があります。

public ActionResult UserAction(string id)
{
    ...
}
于 2013-01-22T18:21:12.717 に答える
0

CRUD メソッドにメッセージ クラスを使用することを検討する必要があります。ロジックを少しきれいにする必要があります。

public class CreateUser
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class DeleteUser
{
    public int UserId { get; set; }
}

次に、次のように、CRUD メソッドごとにコントローラー アクションを作成します。

public ActionResult Create(CreateUser message)
{
}

public ActionResult Delete(DeleteUser message)
{
}

jQuery では、次のように AJAX 呼び出しを準備します。

$.ajax({
    url: "/yourcontroller/create",
    type: "POST",
    data: formData,
    success: function() { console.log('success'); },
    error: function() { console.log('error'); }
});

$.ajax({
    url: "/yourcontroller/delete/" + $("#userId").val(),
    type: "DELETE",
    success: function() { console.log('success'); },
    error: function() { console.log('error'); }
});

最後に、これらを接続したら、Firebug を使用して jQuery 側をチェックし、VS 管理者モードでブレークポイントを使用して、呼び出しがメッセージ オブジェクトに正しく入力されていることを確認します。

于 2013-03-10T20:58:11.890 に答える