モデルバインディングとGETリクエスト?
-
12-09-2019 - |
質問
HTML フォームのモデル バインディングの例はたくさんありますが、ActionLinks/GET リクエストにモデル バインディングを使用できるかどうか、使用できる場合はどのように使用するか疑問に思っています。
したがって、次のモデルが与えられると、
public class Lurl
{
public string Str {get;set;}
public char Chr {get;set;}
public double Dbl {get;set;}
}
そして次のルート(これがどのように形成されるかはわかりません。URL がプロパティ Str、Chr、Dbl をどのように表現するかを示すためにこれを提示します)
routes.MapRoute(
"LurlRoute",
"Main/Index/{str}/{chr}/{dbl}",
new
{
controller = "Main",
action = "Index",
lurl = (Lurl)null
}
);
コントローラーでこのように使用したいのですが
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Index(Lurl lurl)
{
/* snip */
}
そして、私のページでこのようにしてください(2つの可能なオプション;他にありますか?)
<div class="links">
<%Html.ActionLink("Link one", "Index", new { lurl = Model })%><br />
<%Html.ActionLink("Link two", "Index",
new { str = Model.Str, chr = Model.Chr, dbl = Model.Dbl })%>
</div>
これはモデル バインディング インフラストラクチャで可能ですか?もしそうなら、サンプルを機能させるには何をする必要がありますか?
解決
私はあなたが、パラメータのアプローチのいずれかとしてクラスを選択する必要がありますだと思います。
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Index(Lurl lurl)
{
/* snip */
}
またはパラメータのアプローチとしての特性
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Index(string str, char chr, double dbl)
{
/* snip */
}
...パラメータアプローチとしてクラスでは、あなたが「のUpdateModel」メソッドを使用することができますが。あなたはあなただけのモデルでいくつかの値を更新したいだけの場合には、そのメソッドで更新するパラメータのホワイトリストを渡すことができます。
また、あなたのMapRouteでは、どのようなパラメータは、お使いのルート・パスでのマップをlurlでしょうか?私はそこに1つの相関に1が存在しなければならないかなり確信しています。
他のヒント
を使用することもできます カスタムモデルバインダー. 。こちらもお読みください これ.
所属していません StackOverflow