9

MVC3に付属する目立たない検証を利用して、jQuery Mobile (Alpha 3)ベースのASP.NET MVC 3アプリケーションを作成しています。ページが直接アクセスされる (URL にハッシュがない) 場合、検証は完全に機能します。ただし、ページに移動すると、jQuery Mobile は Ajax ナビゲーションを使用してページを動的に読み込み (URL にハッシュを表示)、検証が機能しなくなります。

使用中のコードのサンプルを次に示します。

モデル:

[Required(ErrorMessage = "Missing value")]
[DisplayName("Property Display Name")]
public int? PropertyName { get; set; }

ビュー (かみそり):

@Html.LabelFor(model => model.PropertyName)
@Html.TextBoxFor(model => model.PropertyName)
@Html.ValidationMessageFor(model => model.PropertyName)

生成された HTML:

<label for="PropertyName">Property Display Name</label>
<input data-val="true" data-val-number="The field Property Display Name must be a number." data-val-required="Missing value" id="PropertyName" name="PropertyName" type="text" value="" />
<span class="field-validation-valid" data-valmsg-for="PropertyName" data-valmsg-replace="true"></span>

他のページが以前にロードされていて、HTML 要素に一意の ID がなくなっている可能性があります。独自の Html ヘルパー クラスを展開して、Label、TextBox、および ValidationMessage の HTML を生成する以外に、このシナリオを処理する方法はありますか?

4

3 に答える 3

14

私はこれと同じ問題に少し苦労してきましたが、@Zoteは私を正しい方向に向けました。

parse()行く方法ですが、セレクターを渡すようにしてください。

jQuery.validator.unobtrusive.parse("form")

また

jQuery.validator.unobtrusive.parse(document)

これをフックする最良の方法は、おそらくJQMpageshowイベントを使用することです。これは、新しいページが遷移するたびにトリガーされます。たとえば、jqmがページ上で魔法をかける前に、pagebeforeshowイベントを使用してこれを実行することもできます。

$('div').live('pageshow',function(event){
  jQuery.validator.unobtrusive.parse(".ui-page-active form");
});

を使用し.ui-page-activeて、現在アクティブなページに検索を絞り込みます。

于 2011-02-19T20:36:44.807 に答える
5

jQuery.validator.unobtrusive.parse()新しいコンテンツをロードした後に電話しましたか? Brad Wilson のブログでこの投稿を読んでください。

于 2011-02-18T17:43:07.203 に答える
0

私が遭遇した同じ問題を解決しました。私の答えはここに掲載されています -

asp.net mvc2でjqueryモバイルを使用している間のハッシュナビゲーションの問題

于 2011-09-20T03:38:37.403 に答える