このページを開くと (初めてでも) 常に検証メッセージが表示されます。ドロップダウン リストのいずれかで値を選択しても、メッセージは消えません。両方の値を選択すると、フォームを送信できますが、メッセージは消えません。
Snippet
Linq to SQLクラスでLanguageID
ありSnippetTypeID
、intです。これは、空のモデルをViewに渡すためLanguageID
、SnippetTypeID
nullであり、AFAIK Linq to Sqlクラスがnull不可のintで必要であるために発生すると想定しています。
ユーザーがフォームを送信しようとする前に検証メッセージが表示されないように、またドロップダウン リストの 1 つが選択されて検証メッセージが削除されるようにするにはどうすればよいですか。
意見
@model Data.Snippet
@using (Html.BeginForm("Save", "Submit", FormMethod.Post))
{
<h1 class="subtitle">Submit new snippet</h1>
<h4>Title</h4>
@Html.TextBoxFor(snippet => snippet.Title, new { @class = "form-field" })
<h4>Language</h4>
@Html.DropDownListFor(snippet => snippet.LanguageID, new SelectList(@ViewBag.Input.Languages, "ID", "Name", @Model.LanguageID), "Choose Language", new { @class = "form-select" })
<p>@Html.ValidationMessageFor(snippet => snippet.LanguageID , "You must choose language", new { @class= "validation-message"})</p>
<h4>Snipet type</h4>
@Html.DropDownListFor(snippet => snippet.SnippetTypeID, new SelectList(@ViewBag.Input.SnippetTypes, "ID", "Name", @Model.SnippetType), "Choose snippet type", new { @class = "form-select" })
<p>@Html.ValidationMessageFor(snippet => snippet.SnippetTypeID,"You must choose snippet type", new { @class= "validation-message"})</p>
<h4>Text</h4>
@Html.TextAreaFor(snippet => snippet.Text, new { cols = "20", rows = "10", @class = "form-field" })
<input type="submit" value="Submit Snippet" />
}
コントローラ
//Controllers are not finished Save() should have
//code to actually insert to db after I fix validation
// GET: /Submit/
//
public ActionResult Index()
{
Snippet model = new Snippet();
SubmitModel input = new SubmitModel();
ViewBag.Input = input;
return View(model);
}
public ActionResult Save(Snippet snippet)
{
return View();
}
モデル
モデルはLinq to Sqlクラスです。
Snippet
ID (int, identifier)
Title (string)
SnippetType (int, FK on table SnippetTypes)
LanguageID (int, FK on table Languages)
Text (string)