0

少し問題があり、助けていただければ幸いです。

読み取り専用テキスト ボックスに表示する必要があるプロパティ ID と NAME を持つユーザー オブジェクトがあります。texbox の値に ID を入力し、テキストに名前を入力したいと思います。

Formcollection に送信されたら、入力したデータを次の方法で取得する必要があります。

collection.Get("User")

これは正しい構文ではないことはわかっていますが、次のことを達成しようとしています:

@Html.TextBoxFor(model => model.User, new { @readonly="readonly",@Value = model.Id , @Text=model.Name })

これを修正するにはどうすればよいですか? テキストボックスにユーザー名を表示するにはどうすればよいですか?送信時に collection.Get("User") でユーザー ID を返しますか?

前もって感謝します。

ps 標準

 @Html.TextBoxFor(model => model.User.Name)

値を保存しないため、私には機能しません。

@Html.TextBoxFor(model => model.User, new { @readonly="readonly",@Value = Model.User.Id})

User.Id が空の場合、明らかな理由で失敗します (私の場合は可能です)。

4

1 に答える 1

2

非表示の入力フィールドに Id を保存する必要があります。

@Html.HiddenFor(x => x.User.Id)
@Html.TextBoxFor(x => x.User.Name, new { @readonly = "readonly" })

readonly を使用している限り、値はモデルにバインドされることに注意してください。しかし、フィールドが無効になるとすぐに、無効になりません。そのため、コントローラーで null 値を受け取ります。

コントローラーでは、FormCollection にアクセスする代わりに Modelbinding を使用できます。

public ActionResult Whatever(User user)
{
    // user.Id
    // user.Name 
    // should be filled.
}

アップデート:

そもそもビューにこれらの値を入れたくないのはなぜですか?

モデルバインディングにそれらが必要な場合は、それらが読み取り専用であっても、人々がそれらを操作できることに注意する必要があります (Firebug、他のスクリプトからの POST 要求)。

モデルを有効にするためにそれらが必要な場合は、非表示の入力フィールドを使用することをお勧めします。サーバー側では、ユーザーが実際に変更することになっている値のみを保存するようにしてください。

于 2012-05-23T18:08:32.990 に答える