Html.HiddenForは何をしますか?


105

私はHtml.HiddenForのドキュメントを読みましたが、それが何に使用されているのか理解していません...

誰かがその使用法を説明して簡単な例を挙げられますか?

それらのヘルパーはコードのどこに行くべきですか?

回答:


112

渡したフィールド(モデルから)のフォームに非表示の入力を作成します。

これは、Model / ViewModelのフィールドで、ページに永続化する必要があり、別の呼び出しが行われたときに戻されたが、ユーザーには表示されないようにする場合に役立ちます。

次のViewModelクラスを検討してください。

public class ViewModel
{
    public string Value { get; set; }
    public int Id { get; set; }
}

ここで、編集ページにIDを保存したいが、表示されないようにします。

<% using(Html.BeginForm() { %>
    <%= Html.HiddenFor(model.Id) %><br />
    <%= Html.TextBoxFor(model.Value) %>
<% } %>

この結果、次のHTMLと同等になります。

<form name="form1">
    <input type="hidden" name="Id">2</input>
    <input type="text" name="Value" value="Some Text" />
</form>

<%= Html.HiddenFor(model.Id)%> <br />上記の彼の例
ブライスフィッシャー

11
ユーザーに「見られた」と言います。ユーザーは、非表示にしてもしなくても、好きなように「変更」できます。
Craig Stuntz

@クレイグ-あなたは正しい。私は実際にはその表現を変更しましたが、どうやらそうではありません。
Justin Niessner、

また、通常はIDに使用され(上記の例のように)、通常は表示しないようにします。
RickAndMSFT 2013年

ビューモデルはコントローラーのパラメーターではないため、少し混乱しています。では、なぜビューモデルのフィールドに入力の名前が生成されるのでしょうか。
ジョン

8

そして、非表示のID入力を編集アクションメソッドに戻すには:

[HttpPost]
public ActionResult Edit(FormCollection collection)
{
    ViewModel.ID = Convert.ToInt32(collection["ID"]);
}

8
これは技術的には真実ですが、フォームがビューモデルに強く型付けされている場合は、これを行う必要はありません。モデルに直接アクセスできるはずです。これにより、変換を行う必要がなくなります。
イエッティ

@Yetti:不正解です。足場メカニズムがIDフィールドを追加するのには十分な理由があります。それを私のチュートリアルの1つから削除し、Fiddlerを使用して、投稿の本文にないことを確認します。
RickAndMSFT 2013年

2
コメントがどのように間違っているのかわかりません。ビューのModelがFor()プロパティである場合、コントローラーメソッドは厳密に型指定され、ModelBinderによって自動的に入力されます。
Erik Philips

2

多くの機能のように、これは多くの異なる問題を解決するために多くの異なる方法で使用できます。私はそれを私たちのツールベルトのさらに別のツールと考えています。

これまでのところ、IDの非表示に重点を置いて説明してきましたが、これは1つの値にすぎないため、多くの値に使用しないでください。それが私がやっていることです、html.beginformが新しいオブジェクトを作成し、そのビューのモデルオブジェクトにすでにいくつかの値が渡されている場合、それらのビューに一度に1つのビューだけをクラスに値をロードします。 beginformでそれらの値への参照を提供しない限り、値は失われます。

html.hiddenforの大きな動機を確認するには、.NET MVCでビューからコントローラーにデータ渡す-"@model"が強調表示されていないことを確認することをお勧めします


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.