データファーストの設定があるため、モデルはデータベースからエンティティフレームワークによって生成され、デフォルトの[必須]アノテーションはありません。3つのフィールドを持つ単純なテーブルがあります。1つのIDと2つのVARCHAR/テキストベースのフィールド。
何を試しても、CRUDフォームで検証を停止することはできません。Web.configで無効にし、コントローラーのCreate()メソッドに[ValidateInput(false)]を追加しましたが、効果がありません。@ Html.ValidationSummaryをfalseに設定し、
これが基本的な見方です。
@using (Html.BeginForm()) {
@Html.ValidationSummary(false)
<fieldset>
<legend>CallType</legend>
<div class="editor-label">
@Html.LabelFor(model => model.CALLTYPE)
</div>
<div class="editor-field">
@Html.TextBox("calltype", "", new { style = "width: 50px;" })
@Html.ValidationMessageFor(model => model.CALLTYPE)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.DESCRIPTION)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.DESCRIPTION)
@Html.ValidationMessageFor(model => model.DESCRIPTION)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
モデル(フレームワークによって生成):
public partial class CALLTYPES2
{
public int ID { get; set; }
public string CALLTYPE { get; set; }
public string DESCRIPTION { get; set; }
}
各フィールドに1文字だけ挿入しても、「値'x'は無効です」と表示されます(検証メッセージをオンのままにして、何が起こっているかを確認します)。
私はどうしたらいいですか?そして、後でこれらのフィールドをどのように検証しますか?モデルで生成されたコードに[必須]を追加できますか?データベースからモデルを再生成するとどうなりますか?
これは、コントローラーのモデルの状態と関係がありますか?
[HttpPost]
public ActionResult Create(CALLTYPES2 calltype)
{
if (ModelState.IsValid)
{
db.CALLTYPES2.Add(calltype);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(calltype);
}
私が何を見逃しているのかわからず、私が読んだチュートリアルはあまり光を当てていません。あなたの応答と私の無知のための謝罪に感謝します。
アップデート
エラーが見つかりました-メソッドCreate()のオブジェクト名「calltype」は、フォームフィールド「calltype」の名前/IDと同じです。バインダーは文字列「calltype」をオブジェクト「calltype」にバインドしようとしていると思います。名前を次のように変更しました。
public ActionResult Create(CALLTYPES2 ctype)
これで、編集ウィンドウと作成ウィンドウの両方で機能します。「ctype」は「calltype」と衝突していません。