4

MVC3 で、値が POST される読み取り専用のテキスト ボックスを作成する方法はありますか?

私は次のことを試しました(このサイトの他の人から):

@Html.TextBoxFor(m => m.Model.xxxx, new { disabled = "disabled", @class = "text-box single-line", @readonly = "readonly" }) 

ただし、値は POST されず、検査すると NULL になります。スタイリング上の理由と、正しくポストバックされると思ったので、テキスト ボックスを使用しました。値を更新するページにJScriptがあるため、POSTされた値を取り戻すことができることが重要です。

DisplayFor と HiddenFor のペアの使用を検討し始めますが、より洗練された解決策があるかどうかを知りたいです。

4

4 に答える 4

4

Html 仕様では、無効なフィールドを送信してはならないことが規定されているため、JS から値を更新して送信する必要がある状況でのみ readonly を使用できます。無効に見えるようにする CSS クラスを readonly にすると、より優れた UI エクスペリエンスが得られます。または、スパンと非表示の入力を使用するだけです。

参照: http://www.w3.org/TR/html401/interact/forms.html#h-17.12.1

「無効化されたコントロールは成功しません。」および「成功したコントロールは提出に対して「有効」です。」

于 2012-06-08T10:39:14.977 に答える
3

これを試して:

@Html.TextBoxFor(m => m.Model.xxxx, new {@class = "text-box single-line", @readonly = "readonly", onfocus = "this.blur()" })
于 2012-06-08T09:49:28.403 に答える
0

あなたが言及したように(および他の人も)、私は次を使用します:

@Html.DisplayFor(m => m.Model.xxxx)

@Html.HiddenFor(m => m.Model.xxxx).
于 2012-06-08T10:18:22.350 に答える
0

これを試して。@disabled にタイプミスがあるようです!

@Html.TextBoxFor(m => m.Model.xxxx, new { @disabled = "disabled", @class = "text-box single-line", @readonly = "readonly" })

ユーザーはそれを編集できないため、他のオプションは HiddenFor であり、ViewModel を介してその値を送信できます。

または、マークアップではなくページの読み込み時に TextBox を無効にし、必要に応じて Javascript または jQuery を使用して再度有効にすることもできます (つまり、[編集] ボタンなど)。

于 2012-06-08T09:53:39.837 に答える