0

いくつかのコントロールを備えたフォームがあります。部分ビューをロードするボタンがフォームにあります。部分ビュー内には、2 つの必須フィールド テキストボックスとボタンがあります。クリックすると、部分ビュー内にあるテキストボックスに対してのみエラーメッセージを表示する必要がありますが、実際のフォームのフィールドに対しては表示しません。また、フォームの送信ボタンをクリックすると、すべてのエラー メッセージが表示される必要があります。

部分ビューが読み込まれた後、以下のように検証プラグインを再初期化しています。

$('#test').removeData("validator");
$.validator.unobtrusive.parse('#test');

以下のスレッドで説明されている検証属性を使用してみましたが、機能しません。たぶん、通常ロードされたビューで機能します。

ASP.NET MVC 検証グループ?

ただし、textbox1.valid() と textbox2.valid() を呼び出すことで個別に検証できます。しかし、私はそれを行う標準的な方法が欠けていると思います。どんな助けでも大歓迎です。

4

1 に答える 1

0

これを行うには、Ajax.BeginForm() を使用して部分ビューを送信します。

//In Partail View
@model SomeModel

@using (Ajax.BeginForm("SomeActionName", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "targetId"})) {

           @Html.EditorFor(mode=>model.FirstText)
           @Html.EditorFor(mode=>model.SecText)
           <input type="submit" value="save">
 }

//In Controller

public ActionResult SomeAction(SomeModel model)
{
    return PartaiulView(model);
}

ここで部分ビューを検証できます。注: Ajax.BeginForm を使用してフォームを送信するときは、結果がビューに表示される" UpdateTargetId " を指定する必要があります。

//In View

<div id="targetId">
   @Html.Partail("PartialView")
</div>

または、モデルが有効である場合に別のアクションにリダイレクトしたい場合は、アクションを変更します

public ActionResult SomeAction(SomeModel model)
    {
        if(ModelState.IsValid)
        {
            return Json(new {redirect = @Url.Action("SomeAction","SomeController")})
        }
        return PartaiulView(model);
    }

次に、部分ビューで Ajax.BeginFormのOnSuccessメソッドを呼び出すことができます

     @using (Ajax.BeginForm("SomeActionName", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "targetId",OnSuccess="success"}))
         {

         }

<script type="text/javascript">

  function success(data)
  {
        if(data.redirect)
        {
            windows.location = data;
        }
  }
</script>

どちらがあなたに適しているか両方をチェックしてください。

于 2012-09-27T07:03:07.863 に答える