0

一部の入力データを表示する必要があるが、ユーザー入力に対して無効にする必要がある場合がいくつかある Web サイトに取り組んでいます。無効化された入力のデータはサーバーに送り返されないため、サーバーに送り返す非表示の入力を常に追加しました。そうすれば、データは null 値で上書きされませんでした。

無効な ListBox をレンダリングするときに問題が発生しました。とりあえず、その ListBox のコピーをレンダリングして、ユーザーに対して非表示にします。同じ結果を得るためのより良いアプローチはありますか?

説明するコード:

@*Works fine*@
@if (Model.OnEdit)
{
  @Html.HiddenFor(x => x.Contract)
  @Html.DropDownListFor(x => x.Contract, 
                        Model.ContractList, 
                        new { disabled = "disabled" })
}

@if (Model.OnEdit)
{
  @*Otherwise the items will be updated to null*@
  @Html.ListBoxFor(x => x.Items, 
                   Model.ItemList, 
                   new { @class = "hidden" })
  @Html.ListBoxFor(x => x.Items, 
                   Model.ItemList, 
                   new { disabled = "disabled" })
}
4

1 に答える 1

0

少し脇に:

無効な入力はユーザーによって変更されていないように扱われるため、入力の一般的な使用例ではありません。そのため、通常、データをサーバーに送信したくない場合があります。

ですから、まずは「なぜ自分は違うのか」をよく考えてみてください。そして「それはまったく違うべきですか?」。データが以前と同じである場合、なぜそれを元に戻す必要があるのでしょうか?

答え:

JavaScript を使用せずにこのデータを送信するより良い方法はありません。

クライアント側の動作が複雑な動的フォームがある場合は、javascript を使用して、無効な入力からデータを収集します。

var listData = $('#ContractList').find(":selected").val();
var data = $('#form').serialize();
data.ContractList = listData;
$.post('ajax/test.html', data, function(result) {
    $('.result').html(result);
});
于 2013-08-21T13:48:30.133 に答える