2012-01-09 22 views
1

を経由して、動的にロードされたフォームを上で動作し、どこで、いつ、私無効に控えめなjavascriptをしません:検証はMVC 3.0でAjaxを

<key="UnobtrusiveJavaScriptEnabled" value="false" />

私はjQueryのAJAXを通じてフォームをロードすると、検証が動作しません。 ! ($ .validator.unobtrusive.parse(id)を呼び出すことによって;)有効になっているときに邪魔にならない

alert(Sys.Mvc.FormContext.getValidationForForm($(this).closest('form')[0])); 

は私が解決策を知っている が、私が何をすべきか無効になっているとき??:確かに次のコードは、nullを返します

答えて

0

私はなぜそれを手作業で行うか検証をオフにしたいと思うのか分かりません。 とにかく、控えめな検証をオフにすると、asp.netヘルパーは、検証関数によって使用されるデータ属性を出力しないという問題があります。

私の提案は、<key="UnobtrusiveJavaScriptEnabled" value="false" />のままにして、jQueryイベントの登録を解除することです。

+0

私は邪魔にならないようにいくつかの問題があります。だから、それなしの解決策は何ですか? –

+0

最初から自分で書く – linkerro

1

Sys.Mvc.FormContext._Application_Load();も呼び出されていることを確認してください。

例を考えてみましょう。

ビューモデル:

public class MyViewModel 
{ 
    [Required] 
    public string Foo { get; set; } 
} 

コントローラー:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult Create() 
    { 
     return PartialView(new MyViewModel()); 
    } 

    [HttpPost] 
    public ActionResult Create(MyViewModel model) 
    { 
     return Content("thanks for submitting"); 
    } 
} 

ビュー(Index.cshtml):

<script src="@Url.Content("~/Scripts/MicrosoftAjax.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/MicrosoftMvcValidation.js")" type="text/javascript"></script> 
<script type="text/javascript"> 
    $.get('@Url.Action("create")', function (result) { 
     $('#foo').html(result); 

     // That's the important bit that you were probably missing 
     Sys.Mvc.FormContext._Application_Load(); 

     $('form').submit(function() { 
      if (Sys.Mvc.FormContext.getValidationForForm(this).validate('submit').length > 0) { 
       return false; 
      } 
     }); 
    }); 
</script> 

<div id="foo"></div> 

動的にロードされる形態(Create.cshtml)を含有部分:

@model MyViewModel 

@{Html.EnableClientValidation(true);} 
@using (Html.BeginForm()) 
{ 
    @Html.LabelFor(x => x.Foo) 
    @Html.EditorFor(x => x.Foo) 
    @Html.ValidationMessageFor(x => x.Foo) 
    <button type="submit">OK</button> 
} 

備考:明らかに、この回答は、推奨されているjQuery unobtrusiveプラグインとjQuery検証プラグインの代わりに完全に廃止されたMicrosoft*.jsスクリプトを使用する場合にのみ有効です。したがって、web.configに<add key="UnobtrusiveJavaScriptEnabled" value="false"/>を設定した場合にのみ有効です。

+0

私はSys.Mvc.FormContext._Application_Load()を追加しました。ページには何のエラーもなく何も変更されずに実行されます! "Uncaught TypeError:Sys.Mvc.FormContext.getValidationForForm(this) –

+0

@MahmoudMoravejに到達すると、未定義のメソッド 'validate'を呼び出すことができません"を返す。あなたのコードが表示されないので、問題を診断することは難しい。私は完全な実例をあなたに提供しました。 –

+0

多分問題は私が "index.cshtml"ページにある別のフォームのためです。とにかく、私は、Html.EnableUnobtrusiveJavaScript(true)を呼び出すことで、1ページに邪魔にならないようにすることはできません!だから私は現在のページに控えめなjavascript JUSTを使用するように私の戦略を変えました!... –