目立たない検証を備えたMVC3アプリケーションがあります。ビューの1<form action=''>..</form>
つには、2つのボタンがあります。「action1」の最初のボタン送信フォームと「action2」の2番目のボタン送信。最初のケースではフォームを検証する必要がありますが、2番目のケースでは検証なしで投稿する必要がありますか?現在、モデルは両方の場合で検証されます。
3 に答える
私は答えを見つけました。'action2'の検証を無効にするには、コントローラーで次のメソッドを実行する必要があります。
ModelState.Clear();
とビューで
Html.EnableClientValidation(false);
Asp.net MVCを実行してからしばらく経ちましたが、これはあなたが探しているものですか?
@if(false) { // Replace false with your model property
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
}
いくつかのオプションがあります。
1)ControllerアクションでModelState.IsValidを使用しないでください。action1で、フォームを検証するjavascriptメソッドを実行します。フォームが有効な場合は、フォームを送信してください。action2では、ModelState.IsValidを使用していないため、フォームを送信すると、コントローラーアクションが実行されます。
2)ControllerアクションでModelState.IsValidを使用します。2つの送信ボタンに同じ名前を付けます(つまり、「SubmitButton」)。それぞれの送信ボタンの値として「action1」と「action2」を割り当てます。SubmitButtonを文字列パラメーターとしてControllerアクションに渡します。SubmitButton ='action1'の場合、ModelState.IsValidを照会します。それ以外の場合は、ModelState.IsValidをクエリしないでください。
オプション2コード
コントローラ:
[HttpPost]
public ActionResult SomeAction(ModelObject theModel, string SubmitButton)
{
if (SubmitButton== 'Action1')
{
if(ModelState.IsValid)
{
//do some work
}
else
{
return(View(theModel));
}
}
else //action2 has ben used to submit, so don't vaildate
{
//do some work
}
}
意見:
<input type="submit" id="action1" name="SubmitButton" value="Action1"/>
<input type="submit" id="action2" name="SubmitButton" value="Action2"/>