MSDNでHtml.HiddenForの適切な定義を見つけることができますが、Html.Hiddenで見つけることができるのは、問題に関連していることだけです。
誰かが私に良い定義と例を教えてもらえますか?
MSDNでHtml.HiddenForの適切な定義を見つけることができますが、Html.Hiddenで見つけることができるのは、問題に関連していることだけです。
誰かが私に良い定義と例を教えてもらえますか?
ほとんどのMVCヘルパーメソッドにはXXXForバリアントがあります。これらは、具体的なモデルクラスと組み合わせて使用することを目的としています。アイデアは、ラムダで指定したプロパティに基づいて、ヘルパーがフォーム入力コントロールの適切な「名前」属性を導出できるようにすることです。これは、モデルのプロパティをビューと相関させるために使用しなければならない「マジックストリング」を排除できることを意味します。例えば:
Html.Hidden("Name", "Value")
結果は次のようになります。
<input id="Name" name="Name" type="hidden" value="Value">
コントローラでは、次のようなアクションが発生する可能性があります。
[HttpPost]
public ActionResult MyAction(MyModel model)
{
}
そして次のようなモデル:
public class MyModel
{
public string Name { get; set; }
}
上で使用したrawは、モデルのプロパティにHtml.Hidden
関連付けられます。Name
ただし、プロパティの値 "Name"を文字列( "Name")を使用して指定する必要があるのは少し不快です。モデルのプロパティの名前を変更するName
と、コードが壊れ、エラーを特定するのがやや困難になります。一方、を使用するHiddenFor
と、それから保護されます。
Html.HiddenFor(x => x.Name, "Value");
これで、プロパティの名前を変更するName
と、プロパティが見つからないことを示す明示的なランタイムエラーが発生します。さらに、入力後にメンバーのドロップダウンを取得するなど、静的分析の他の利点も得られますx.
。
Html.Hiddenは非表示の入力を作成しますが、そのフィールドと値に付ける名前とすべての属性を指定する必要があります。はHtml.HiddenFor
、渡すオブジェクトの非表示の入力を作成します。次のようになります。
Html.Hidden("yourProperty",model.yourProperty);
Html.HiddenFor(m => m.yourProperty)
この場合、出力は同じです。
HtmlHelperクラスのすべてのメソッドには、接尾辞が付いたツインがありFor
ます。
Html.Hiddenは、指定する必要のある引数として文字列を取りますが、Html.HiddenForは、ビューが強く型付けされたビューである場合にこの恩恵を受け、そのメソッドにこのようなラムダ式をフィードできる式を取ります。
o=>o.SomeProperty
Html.Hiddenメソッドを使用する場合の「SomeProperty」の代わりに。
Html.Hidden('name'、'value')は、name='name'およびvalue='value'の非表示タグを作成します。
Html.HiddenFor(x => x.nameProp)は、名前='nameProp'および値=x.namePropの非表示タグを作成します。
額面通り、これらは同様のことをしているように見えますが、一方が他方よりも便利です。ただし、実際の値はモデルバインディング用です。MVCがhtmlをモデルに関連付けようとする場合、プロパティの名前が必要です。Html.Hiddenには、「nameProp」ではなく「name」を選択したため、バインディングは機能しません。カスタムバインディングオブジェクトを用意するか、フォームデータから値を取得する必要があります。ページを再表示する場合は、モデルを値に再度設定する必要があります。
したがって、Html.Hiddenを使用できますが、名前を間違えた場合、またはモデルのプロパティ名を変更した場合、フォームを送信するときに自動バインドが失敗します。ただし、型チェック式を使用すると、コードが完了し、プロパティ名を変更すると、コンパイル時エラーが発生します。そして、あなたはフォームに正しい名前を持っていることが保証されます。
MVCの優れた機能の1つ。
Html.HiddenおよびHtml.HiddenForは、コントローラーのアクションメソッドによって待機される名前と値のペアを生成するために使用されます。使用例(*):
@using (Html.BeginForm("RemoveFromCart", "Cart")) {
@Html.Hidden("ProductId", line.Product.ProductID)
@Html.HiddenFor(x => x.ReturnUrl)
<input class="btn btn-sm btn-warning"
type="submit" value="Remove" />
}
アクションメソッドが「ProductId」を待機する場合は、(Html.HiddenまたはHtml.HiddenFor)を使用してフォームでこの名前を生成する必要があります。強い型のモデルでこの名前を生成できない場合は、この名前を次のように記述します。文字列thats"ProductId"。
public ViewResult RemoveFromCart(int productId, string returnUrl){...}
Html.HiddenFor(x => line.Product.ProductID)と記述した場合、ヘルパーは「line.Product.ProductID」という名前の非表示フィールドをレンダリングします。フィールドの名前は、「ProductId」の名前を待機している「RemoveFromCart」アクションメソッドのパラメーターの名前と一致しません。これにより、デフォルトのモデルバインダーが機能しなくなるため、MVCフレームワークはメソッドを呼び出すことができなくなります。
* Adam Freeman(Apress-Pro ASP.Net MVC 5)