8

次のように、独自のフォームタグを格納する部分ビューを設定しました。

<tr>
    @using (Html.BeginForm("Create"))
 {
        <td>
            @Html.TextBoxFor(model => model.Date)
            @Html.ValidationMessageFor(model => model.Date)
        </td>
        <td>
            @Html.TextBoxFor(model => model.Amount)
            @Html.ValidationMessageFor(model => model.Amount)
        </td>
        <td>
            @Html.TextBoxFor(model => model.Tags)
            @Html.ValidationMessageFor(model => model.Tags)
        </td>
        <td>
            @Html.EnumDropDownListFor(model => model.Type)
        </td>
        <td>
            <input type="submit" value="Add" />
            @Html.ValidationSummary(true)
        </td>
 }
</tr>

@ Html.Action( "Create")を使用してページにレンダリングします(これはテーブルの一部であるため、<tr>タグです。

奇妙な理由で、クライアント側の検証が機能せず、投稿時に最初にエラーが表示されます。

部分ビューとクライアント側の検証について何か特別なことはありますか?

次のスクリプトを含めました。

<script src="/Scripts/jquery.1.5.1.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.validate.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"></script>

編集

このスクリプトをページに投げてみました:

jQuery('form').submit(function ()
{
    alert(jQuery(this).valid());
});

「true」と警告するので、クライアント側の検証スクリプトは間違いなくそこにあり、何らかの理由で問題のフィールドをチェックしていません:-/

編集2

ページのソースコード全体(HTML + JS)をpastebinにアップロードしました:http://pastebin.com/GvqLW495

4

3 に答える 3

11

編集

あなたのコードを見て、あなたがjQuery 1.5.1を(私が想定している).NETが提供するjQuery.validateで使用していることに気づきました。残念ながら、これら2つはまだ連携していません。最新のjQueryで動作するバージョンを入手するには、ここに向かう必要があります(1.4.4を使用する必要があります)。それでもうまくいかない場合でも、以下の解決策を確認することをお勧めします。


私も同様の問題を抱えていました(まったく同じ問題かどうかはわかりませんが)。私はこのブログ投稿で解決策について書きました。残念ながら、あなたが同じ問題を抱えているかどうかはわかりませんが、一見の価値があります。

基本的に、PartialViewsをロードした後にこの行を呼び出さなければならなかったという事実に要約されます(私は問題を引き起こしたと思うものであるAJAXを介してそれらをロードしていましたが):

$.validator.unobtrusive.parse($("#validation"));

詳細については、ブログ投稿を参照してください。うまくいけば、それはあなたを助ける。

于 2011-03-14T17:55:40.743 に答える
1

私はついにそれが失敗する原因を見つけました、それは私の部分的なビューがhtmlテーブルの中にあるという事実です...

<table>
    <tr>
        <th>
            Date
        </th>
        <th>
            Amount
        </th>
        <th>
            Tags
        </th>
        <th>
            Type
        </th>
        <th>
        </th>
    </tr>
    @Html.Action("Create")
</table>

これは機能しませんが、@ Html.Actionをテーブルタグの外に移動すると、問題なく機能します。

于 2011-03-17T18:15:15.693 に答える
0

問題の根本は、不正なhtml構文の使用にあると思います 。<tr>タグにはタグのみを含めることができ<td>ます。
ほとんどの場合、特に非同期でロードされた場合、ブラウザでのような構造は正しくレンダリングされません。

于 2014-03-11T12:48:05.650 に答える