私のビューにはフォームがあります。フォームのフィールドはモデルから派生しています。 ここでコードを短縮するための変数を1つだけ指定しました。フォームのサーバー側mvc3検証が機能しない
MODEL:
public class abc
{
[Required]
public string name { get; set; }
}
VIEW:
<body onload="SetButton()">
@using (Html.BeginForm("myaction","mycontroller",FormMethod.POST, new {id="myform"}))
{
@Html.TextBoxFor(m=>m.name)
@Html.ValidationMessageFor(m=>m.name)
}
</body>
<script type="text/javascript">
function SetButton{
document.getElementById("button").innerHTML='<input type="submit" value="Next" style="width:90px" onclick="myform.submit()"/>';
}
</script>
Layout Page:
<div id="button"></div>
[次へ]ボタンをクリックすると、検証は行われません。フォームは「名前」フィールドに何も入力されていなくても送信されます。ボタンがフォーム(myform)の中に置かれていると、検証作業が行われます。
私は、ネストされたフォームを持っていません。実際、ボタンは複数の画面に共通するフッターの一部なので、レイアウトページ内のフォームの外に置くことにしました。 「提出」タイプを「ボタン」に変更しても機能しませんでした。ボタンを外に保ち、検証を行う方法はありますか? –
@ karank、はい、可能です。送信タイプの代わりにボタンタイプを使用し、コントローラーアクションでアクションモデルとしてビューモデルを取得する必要があります。ビューモデルが適切な検証属性で修飾されている場合は、エラーメッセージが自動的にModelStateに追加されます。 –