15

サーバー側の検証と同様にクライアント側の検証も必要です。私はこれを次のように認識しました:

モデル:(モデルには、Testクラスを含むDataModel(dbml)があります)

namespace MyProject.TestProject
{
    [MetadataType(typeof(TestMetaData))]
    public partial class Test
    {

    }

    public class TestMetaData
    {
        [Required(ErrorMessage="Please enter a name.")]
        [StringLength(50)]
        public string Name { get; set; }
    }
}

コントローラーは特別なものではありません。

景色:

<% Html.EnableClientValidation(); %>
<% using (Ajax.BeginForm("Index", "Test", FormMethod.Post, 
            new AjaxOptions {}, new { enctype = "multipart/form-data" }))
   {%>
   <%= Html.AntiForgeryToken()%>
    <fieldset>
        <legend>Widget Omschrijving</legend>
        <div>
            <%= Html.LabelFor(Model => Model.Name) %>
            <%= Html.TextBoxFor(Model => Model.Name) %>
            <%= Html.ValidationMessageFor(Model => Model.Name) %>
        </div>
    </fieldset>
    <div>
        <input type="submit" value="Save" />
    </div>
 <% } %>

これをすべて機能させるために、jsファイルへの参照も追加しました。

<script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script>
<script src="../../Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script>
<script src="../../Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script>
<script src="../../Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>

最終的には機能する必要がありますが、100%は機能しません。ボタンを押した後、ページを更新せずに検証します。また、クライアント側の「半分」の検証も行います。テキストボックスにテキストを入力してから、入力したテキストをバックスペースする場合のみ。クライアント側の検証が表示されます。しかし、コントロール間をタップしてこれを試してみると、クライアント側の検証はありません。

私はいくつかの参照か何かを逃しますか?(私はAsp.Net MVC 2 RTMを使用しています)

4

3 に答える 3

5

ロードされたJavaScriptの順序を変更します。

<script src="../../Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
<script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script>
<script src="../../Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script>
<script src="../../Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script>

まったく同じ問題があり、これで問題は解決しました...

于 2010-07-16T17:56:33.570 に答える
1

私も何かが足りないと思っていましたが、jQuery検証プラグインがmouseEnter/mouseLeaveに反応しないことは知っています。そのプラグインのドキュメントによると(プラグインページで、「デモを試してみるときに探すべきいくつかのこと」というラベルの付いたセクションを探してください):

フィールドが無効としてマークされる前は、検証は怠惰です。フォームを初めて送信する前に、ユーザーは迷惑なメッセージを受け取らずにフィールドをタブで移動できます。実際に正しい値を入力する前にバグが発生することはありません。

MVC2のクライアント側の検証と同じルールだと思います。ドキュメントには「自分のマシンで動作する」以外は何も書かれていないので、それはわかりません:)。

MVC FuturesでサポートされているjQuery検証ルートを使用しました(そのためのドキュメントは存在しないことに注意してください)。これを使用するには、MicrosoftAjax.js、MicrosoftMvcAjax.js、およびMicrosoftMvcValidation.jsファイルのスクリプトタグを次の2つのタグに置き換える必要があります。

<script src="/js/jquery.validate.js" type="text/javascript"></script>
<script src="/js/MicrosoftMvcJQueryValidation.js" type="text/javascript"></script>

パスを自分のものに置き換えます。

また、ここでは新しいバージョンのjQuery(1.4)を使用しているため、開発者のページから最新バージョンのjquery.validate.jsにアップグレードする必要があることもわかりました。

お役に立てば幸いです。

于 2010-03-23T18:55:25.777 に答える
1

うーん...、答えるのは遅いですが、これを試してみてください:

<script src="<%= Url.Content("ScriptFile.js") %>" type="text/javascript"></script>
于 2010-06-20T16:51:21.380 に答える