1

ユーザーのリストのユーザー情報を表示するフォームがあります。ユーザーが情報を更新するための詳細ビューに移動するためのアクション リンクがあります。私たちのアプリケーションは、ASP.Net 4.0 と MVC を組み合わせたものです。通常、暗号化を使用してクエリ文字列で使用する変数をマスクしますが、クエリ文字列を暗号化しようとすると MVC がチョークします。Microsoft Enterprise 5.0 Cryptogrophy クラスを使用しています。クエリ文字列を暗号化するか、クエリ文字列をまったく使用せずにデータを渡すにはどうすればよいでしょうか? RazorでMVC 4を使用しています。

現在、次のようなことを行っています: @Url.Action("Edit", "User", new {id = user.Id}

ところで、私は MVC を初めて使用するので、私が気付いていない簡単な答えがあるかもしれません。

クエリ文字列をまったく使用できなかったとしたら、本当に素晴らしいことです。

4

2 に答える 2

2

簡単な答え:POST。フォームまたはAJAX呼び出しを使用して、値をPOSTデータとして送信し、既存のメソッドと同じ名前のコントローラーメソッドを使用しますが、[HttpPost]属性でマークを付けます(また、既存のメソッドをとしてマークします[HttpGet])。この新しいPOSTメソッドの引数は、好きなものにすることができます。POSTされると(特にAJAXを使用する場合)文字列に変換される可能性がありますが、MVCは、同じ名前が付けられていれば、それらを再び変換できるほど賢いです。したがって、次のような形式になります。

@using (Html.BeginForm("Edit", "User", FormMethod.Post, new { id = "mainForm" }))
{
    <input id="userId" type="text" />
    <input type="submit" />
}

次のようなコントローラーメソッドにきちんと対応します。

[HttpPost]
public ActionResult Edit(int userId)
{
    //do whatever
}

ルートが正しく登録されていれば。GETメソッドが機能している場合、URLパラメータに問題がない限り、同じルートがここで機能します。

同じメソッドは、次のようなAJAX呼び出しからの送信も受け入れます。

$.ajax({
    type: "POST",
    url: '@Url.Action("Edit", "User")',
    data: { userId: @user.Id },
    success: function (data) {
        //do whatever
    }
});
于 2013-02-15T17:21:28.743 に答える
1

anaximander に同意しますが、クエリ文字列情報を保護するために多大な労力を費やす場合、フォームは情報をクエリ文字列パラメーターではなく HTML フィールドに移動するだけです。既存の実装を保持する必要がある場合は、デフォルトの ModelBinder からの継承を検討し、独自のカスタム実装を提供して、暗号化されたクエリ文字列から暗号化されていないクエリ文字列に変換してから、基本クラスの実装に渡すことができます。

于 2013-02-15T18:28:53.490 に答える