45

ASP.NET Web フォーム アプリケーション (MVC ではない) で jQuery Validation プラグインを使用したいと考えています。aspバリデーターをどこにでも追加して、それらすべてのフィールドを検証するようにコントロールを設定するよりも簡単だと思います。

この class="required email" のようなクラスを設定するときに、メインフォームタグ内にフォームタグがあることに関係があると思われる両方の問題が発生しています。

aspコントロールで壊れた名前を使用してjquery validateを呼び出すときにも問題が発生します

// validate signup form on keyup and submit
$("#signupForm").validate({
    rules: { 
        username: {
            required: true,
            minlength: 2
        }, },
    messages: { 
        username: {
            required: "Please enter a username",
            minlength: "username at least 2 characters"
        }, 
    }.

.......

        <p>
            <label for="username">
                Username</label>
            <input id="username" name="username" />
        </p>

これだから

<asp:TextBox ID="tbUsername"  runat="server"></asp:TextBox>

としてレンダリングします

<input name="ctl00$ContentPlaceHolder1$tbUsername" type="text" id="ctl00_ContentPlaceHolder1_tbUsername" />

そして名前をマングルします。を使用して ClientID を取得できますが、<%=tbUsername.ClientID %>ClientName では機能しません

jqueryバリデータプラグインをasp.netで使用して成功した人はいますか? もしそうなら、別々の検証グループを使用するのと同じように、複数のフォームを使用するのはどうですか?

4

11 に答える 11

47

ルール追加機能をチェックアウトできますが、基本的には次のことができます。

jQuery(function() {
    // You can specify some validation options here but not rules and messages
    jQuery('form').validate(); 
    // Add a custom class to your name mangled input and add rules like this
    jQuery('.username').rules('add', { 
        required: true, 
        messages: { 
            required: 'Some custom message for the username required field' 
        } 
    });
});

<input name="ctl00$ContentPlaceHolder1$tbUsername" type="text" id="ctl00_ContentPlaceHolder1_tbUsername" class="username" />

このように、webformsエンジンによって生成されたくだらない識別子について心配する必要はありません。

于 2009-03-06T18:39:30.420 に答える
11
$("#signupForm").validate({
        rules: { 
                <%= tbUsername.UniqueID %>: {
                        required: true,
                        minlength: 2
                }, },
        messages: { 
                <%= tbUsername.UniqueID %>: {
                        required: "Please enter a username",
                        minlength: "username at least 2 characters"
                }, 
        });

<asp:TextBox ID="tbUsername" runat="server"></asp:TextBox>
于 2010-08-27T08:22:36.987 に答える
11

以下は、WebForms で jQuery Validation プラグインを使用し、それを使用して検証グループの概念をエミュレートする例です。いくつかの問題を滑らかにすると、実際にはかなりうまく機能します。

于 2010-02-11T05:18:31.333 に答える
4

ここで xVal.webForms を確認できます: http://xvalwebforms.codeplex.com/

于 2009-10-21T11:11:17.103 に答える
2

最善の解決策は、jQueryルールでtbUsernameの代わりに「<%= tbUsername.UniqueID%>」を使用することです。

$("#signupForm").validate({
rules: { 
    "<%=tbUsername.UniqueID %>": {
        required: true,
        minlength: 2
    }, },
messages: { 
    "<%=tbUsername.UniqueID %>": {
        required: "Please enter a username",
        minlength: "username at least 2 characters"
    }, 
}.
于 2012-10-02T04:30:35.767 に答える
2

Darin Dimitrov の発言をテストしたところ、完全に機能しましたが、各フィールドに特定のクラスを設定したくない場合は、jQuery セレクターを使用できます。

$('form').validate();
$('input[id$=Username]').rules('add', { 
    required: true, 
    messages: { 
        required: 'Some custom message for the username required field' 
    } 
});

<input name="ctl00$ContentPlaceHolder1$tbUsername" type="text" id="ctl00_ContentPlaceHolder1_tbUsername" />
于 2010-05-27T18:14:03.803 に答える
0

最近、xVal.WebFormsのパッチファイルを投稿しました。これは、よく知られているASP.Net検証グループで中継される複数のフォームの問題を解決します。このパッチは、ASP.NetCausesValidationプロパティもサポートしています。

Yoはここでそれについて読むことができます:http://cmendible.blogspot.com/

于 2009-10-28T15:34:45.467 に答える
0

これを行うための優れた方法は、次を使用することです。

サーバーアイテムを参照する必要がある場合は常に、< %= textbox.Name%>または<%= textbox.ClientId%> 。

すなわち

var phoneNumb = $('#<%= tPhone.ClientID %>').val(); 

また

$("#signupForm").validate({
        rules: { 
                <%= username.Name %>: {
                        required: true,
                        minlength: 2
                }, },
        messages: { 
                <%= username.Name %>: {
                        required: "Please enter a username",
                        minlength: "username at least 2 characters"
                }, 
        }.

.....。

于 2010-07-23T02:50:49.257 に答える
0

SharePoint 2010の場合、さまざまなユーザー コントロールをビューとして (ajax 経由で) ロードすると、javascript をライブラリに移動し、コントロール ID にサーバー タグを次のように使用できない場合に、これが機能することがわかりました。

例えば#<%= tPhone.ClientID %>

$('input[id$=tPhone]').rules('add', 
{      
 required: true,      
 messages: 
 {          
  required: 'Some custom message for the username required field'      
 }  
});

これに加えて、Ajax 経由でユーザー コントロールを動的にロードする場合、$(document).ready を使用することはできません。jQuery を関数ライブラリにカプセル化する必要があります。(サーバー側イベント) ページでユーザー コントロールが正常に読み込まれる場合は、jQuery を関数ライブラリにカプセル化する必要があります。シナリオでは、更新パネルを使用して Ajax を介して読み込まれますが、踊ることはありません。

私はまだjQuery経由でユーザーコントロールをロードしようとはしていません.これは重く見え、ページ全体をロードするように見えます.

読み込み方法を比較したテストでは、更新パネルが他の方法と同じくらい高速であり、ページ サイズが他の方法と同じかそれよりも小さくなり、基本的にはより速く、またははるかに多くのデータを読み込みました。

于 2011-08-10T22:03:40.290 に答える
0

この記事の情報により、jQuery との一致を探すときに Control.ClientID を使用するようになりました...非常に役立つ情報...

<label for="<%= tbName.ClientID %>">Name</label>
<input id="cphBody_tbName" runat="server" .../>
于 2016-07-31T03:49:56.640 に答える