4

次のように、ajaxを使用してViewからController Action Methodにデータを渡そうとしています:-

この ViewBag.MyUser = MyUser; のようなビューバッグを使用して、別のコントローラーからこのビューに渡したユーザーのメンバーシップ インスタンスがあります。

以下のように ajax を使用して、このビューから「MyUser」を別のコントローラーに渡したいと思います。

 $('#Link').click(function () {      
        $.ajax({
            url: http://localhost/Account/Process,
            type: 'POST',
            data: '@ViewBag.MyUser',
            success: function () {
            },
            error: function () {                
            }
        });

私が投稿しているActionMethodは次のとおりです

public ActionResult Process(MembershipUser MyUser)
{
   //Do somethihng with MyUser
}

do ajax post を渡す BeginExecuteCore(AsyncCallback callback, object state)と、「このオブジェクトにはパラメーターなしのコンストラクターが定義されていません」というエラーが内部的に発生します。そして、コントロールは私の行動方法にさえ来ません。

アクションメソッドからパラメーターを削除すると(MembershipUser MyUser)、アクションメソッドに投稿されますが、その後

  1. このような場合、そのビューからコントローラーへのパラメーターなしで「MyUser」を渡すにはどうすればよいですか?
  2. ルートに何か問題がありますか?はいの場合、ルートは何ですか?
  3. または get または post を使用する必要がありますか?
  4. どこで MyUser を MembershipUser にキャストする必要がありますか?
4

1 に答える 1

9

問題は、JQuery がクラスMembershipUserを認識していないため、JQuery からMyUserをパラメーターとして渡すことができないことです。JQuery はクライアント側の言語であり、MembershipUserはサーバー側の C# で定義されていることに注意してください。

次のようにGETを使用して、必要なプロパティをMyUserオブジェクトからProcessアクションに渡すことができます ( MyUserオブジェクトにIDNameがあると仮定します)。

$('#Link').click(function () {      
    $.ajax({
        url: http://localhost/Account/Process,
        type: 'GET',
        data: { 
                id: "@ViewBag.MyUser.ID",
                name: "@ViewBag.MyUser.Name" 
              },
        success: function () {
        },
        error: function () {                
        }
    });

アクションは次のようになります。

public ActionResult Process(int id, string name)
{
   //Do something
}

お役に立てば幸いです。

于 2013-04-10T18:08:11.720 に答える