ASP.NET MVCで無効な入力を送信するにはどうすればよいですか?
みんなありがとう:
私がこれを解決した方法:
document.getElementById("Costo").readOnly = true;
document.getElementById("Costo").style.color = "#c0c0c0";
注意:
私は答えでこの情報を得ましたが、編集されました。
フィールドを作成できませんreadonly="readonly"
の代わりに disabled="disabled"
?読み取り専用フィールドの値はサーバーに送信されますが、ユーザーは編集できません。ただし、SELECT
タグは例外です。
@ -ppumkinは この回答 に関するコメントでこれについて言及しましたが、無効な<select>
からのデータ送信に関する他のリソースを見つけることができなかったため、強調したかったのです。また、selectは<input>
sではなく、「入力」であるため、質問に関連していると思います。
無効化された選択とすべてのソートのための非表示フィールドを含めるだけです。
例:
@Html.DropDownListFor(model => model.SelectedID, ... , new { disabled = "disabled"}) @* Won't be posted back *@
@Html.HiddenFor(model => model.SelectedID) @* Will be posted back *@
注意:これにより、同じIDを持つ2つのタグがページに配置されますが、これは実際には有効なHTMLではなく、javascriptで頭痛の種になる可能性があります。私にとっては、html id
でドロップダウンの値を設定するjavascriptがあり、隠しフィールドを最初に置くと、javascriptはselect
の代わりにそれを見つけます。
通常、「読み取り専用」でサーバーに送信する必要があるフィールドがある場合、表示を無効(または単にテキスト)にしますが、同じ名前の非表示フィールドを追加します。フィールドがサーバー側で実際に変更されていないことを確認する必要があります(アクションでモデルからフィールドを更新しないでください)が、エラーがある場合でもモデルの状態は正確です。
フォームを送信する前に、次のようなコードを使用することもできます。
$(":disabled", $('#frmMain')).removeAttr("disabled");
以下のようなエディターテンプレートを作成できます。
CSS
.disabled {
background-color:lightgray;
}
エディターテンプレート
@model string
@Html.TextBoxFor(x => x,new {@class="disabled", @readonly=true })
設計上、ブラウザはそれをサポートしていません。
値をサーバーに送信できるようにするreadonly
にするか、Selectなどのreadonly
属性で引き続き使用できるコントロールを処理する場合は、CSSスタイルpointer-events: none;
非インタラクティブにする
ハッキングのようなものですが、動作します! JavaScriptを使用せずに送信ボタンでフォームを直接送信する場合にも機能します。余分な作業は必要ありません!
例えば:
<select asp-for="TypeId"
asp-items="@(new SelectList(await TypeRepository.FetchTypesAsync(), "TypeId", "Name"))"
class="form-control form-control-sm"
readonly
style="pointer-events: none;">
</select>
無効になっているがチェックボックスをオンにして値を送信する場合、非表示フィールドが@ Html.CheckBoxFor非表示フィールドの前に表示されるようにする必要があります。
以下は、私が答えを見つけた場所からのリンクです。 http://davecallan.com/posting-disabled-checkboxes-mvc-razor-views/#comment-110
$( "#iD")。attr( "style"、 "ポインターイベント:なし;背景色:rgb(220,220,220)");
これは、asp.netでモデル値を送信するのに役立ちます。
拡張Tasos '( ":disabled"、$('#xxxForm '))。removeAttr( "disabled");使用できます:
$("#xxxForm").submit(function (e) {
e.preventDefault();
var form = this;
$('#Field1')[0].disabled = false;
$('#Field2')[0].disabled = false;
...
$('#FieldN')[0].disabled = false;
form.submit(); // submit bypassing the jQuery bound event
});
無効にすると値が失われるため、通常はCheckBoxまたはCheckBoxForにこの方法を使用します。読み取り専用はチェックボックスでも機能しません。
@Html.DisplayFor(m => m.Order.Transfer)
@Html.HiddenFor(m => m.Order.Transfer)