web-dev-qa-db-ja.com

ASP.NET MVCで無効な入力を送信するにはどうすればよいですか?

ASP.NET MVCで無効な入力を送信するにはどうすればよいですか?

90
Sanchitos

みんなありがとう:

私がこれを解決した方法:

document.getElementById("Costo").readOnly = true;
document.getElementById("Costo").style.color = "#c0c0c0";

注意:

私は答えでこの情報を得ましたが、編集されました。

36
Sanchitos

フィールドを作成できませんreadonly="readonly" の代わりに disabled="disabled"?読み取り専用フィールドの値はサーバーに送信されますが、ユーザーは編集できません。ただし、SELECTタグは例外です。

135
Darin Dimitrov

@ -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の代わりにそれを見つけます。

25
DLeh

通常、「読み取り専用」でサーバーに送信する必要があるフィールドがある場合、表示を無効(または単にテキスト)にしますが、同じ名前の非表示フィールドを追加します。フィールドがサーバー側で実際に変更されていないことを確認する必要があります(アクションでモデルからフィールドを更新しないでください)が、エラーがある場合でもモデルの状態は正確です。

19
tvanfosson

フォームを送信する前に、次のようなコードを使用することもできます。

$(":disabled", $('#frmMain')).removeAttr("disabled");
14

以下のようなエディターテンプレートを作成できます。

CSS

.disabled {
    background-color:lightgray;
}

エディターテンプレート

@model string
@Html.TextBoxFor(x => x,new {@class="disabled", @readonly=true })
6
joetinger

設計上、ブラウザはそれをサポートしていません。

値をサーバーに送信できるようにする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>
3
Dave

無効になっているがチェックボックスをオンにして値を送信する場合、非表示フィールドが@ Html.CheckBoxFor非表示フィールドの前に表示されるようにする必要があります。

以下は、私が答えを見つけた場所からのリンクです。 http://davecallan.com/posting-disabled-checkboxes-mvc-razor-views/#comment-110

2
Mitesh Patel

$( "#iD")。attr( "style"、 "ポインターイベント:なし;背景色:rgb(220,220,220)");

これは、asp.netでモデル値を送信するのに役立ちます。

1
Rohan

拡張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
});
0
flavior

無効にすると値が失われるため、通常はCheckBoxまたはCheckBoxForにこの方法を使用します。読み取り専用はチェックボックスでも機能しません。

@Html.DisplayFor(m => m.Order.Transfer)
@Html.HiddenFor(m => m.Order.Transfer)
0