2017-10-06 9 views
1

jQueryフォームバリデータはHtml.Beginformで正常に動作します。MVCのAjax.BeginFormのonBeginメソッド内でjQueryフォームバリデータを使用

私は、リフレッシュせずにフォームを送信するために、Html.BeginformをAjax.Beginformに変更しました(Ajax投稿を試みましたが、コントローラ内でファイルがnullになっています)。

Ajax.Beginformに変更した後、jQueryフォームのバリデーターが機能していません。

Ajax.BeginformのonBeginメソッド内でjQueryフォームバリデーターを使用することはできますか?

ビュー:

<script src="~/scripts/jquery-1.10.2.min.js"></script> 
<script src="~/scripts/jquery.validate.min.js"></script> 
<script src="~/scripts/jquery.validate.unobtrusive.js"></script> 
<script src="~/scripts/jquery.unobtrusive-ajax.min.js"></script> 

@using (Ajax.BeginForm("Index", "Home", new AjaxOptions { OnSuccess = "Success", OnFailure = "Failure", OnBegin = "validate", HttpMethod = "post" }, new { @Id = "form", enctype = "multipart/form-data" })) 
{ 
<script> 
    function Success(data) { 
     alert(data); 
    } 
    function Failure() { 
     alert("failure"); 
    } 
    function validate() { 
     $(document).ready(function() { 
      $("#form").validate({ 
       rules: { 
        text1: { 
         required: true, 
        }, 
        text2: { 
         required: true, 

        } 
       }, 
       messages: { 
        text1: { 
         required: "enter text1" 
        }, 
        text2: { 
         required: "enter text2" 
        }, 
       } 

      }); 
      if ($("#form").valid()) { 
       return true; 
      } 
      else { 
       return false; 
      } 
     }); 

    } 
</script> 

<div> 
    <input type="text" id="text" name="text" /> 
</div> 
<div> 
    <input type="text" id="text1" name="text1" /> 
</div> 
<div> 
    <input type="submit" id="submit" name="submit" /> 
</div> 

} 

コントローラー:

public class HomeController : Controller 
    { 
     // GET: Home 
     public ActionResult Index() 
     { 
      return View(); 
     } 
     [HttpPost] 
     public ActionResult Index(FormCollection formcollection) 
     { 
      return Json("1"); 
     } 
    } 
+0

はいそれは可能だが、私は内jqueryのバリデータを使用している場合、あなたは... @GGOをチェック今 – GGO

+0

私たちにいくつかのコードを表示する必要がありますonBeginは以下のエラーをスローします。 – Yashas

+0

0x800a01b6 - JavaScriptランタイムエラー:オブジェクトがプロパティまたはメソッド 'validate'をサポートしていません – Yashas

答えて

0

Firstableあなたはまだunobstrusive jqueryのバリデータが含まれます。あなたは入力にdata-val html属性を使用して、フィールドの自動検証を行うことができ、あなたのコードは読みやすくなります。邪魔にならない検証についてのドキュメントを見てください。

問題はAjax.BeginFormです。メソッドパラメータを確認するには、Visual Studioのオートコンプリートを参照してください。これは、パラメータが欠落している、あなたはそのように、routeValuesパラメータのnull値を配置する必要があります:

@using (Ajax.BeginForm("Index", "Home", null, new AjaxOptions { OnSuccess = "Success", OnFailure = "Failure", OnBegin = "validate", HttpMethod = "post" }, new { @Id = "form", enctype = "multipart/form-data" })) 
+0

こんにちは@ggo ...今、私は検証することもできます。今再びまた新しい問題は、ファイルの入力を追加すると、フォームコレクション、モデル、さらにはhttppostedfilebaseでnullになるということです。 – Yashas

+0

私の答えが致命的な問題を解決したら、このトピックを緑色のチェックマークでチェックして閉じてください。ファイル入力のような別の問題がある場合は、関連するコードで別のトピックを作成する必要があります。ありがとう – GGO

関連する問題