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());
});

它警告“真”,所以客户端验证脚本肯定在那里,并且由于某种原因它没有检查有问题的字段:-/

编辑 2

我已将页面的整个源代码(HTML + JS)上传到 pastebin: http: //pastebin.com/GvqLW495

4

3 回答 3

11

编辑

我刚刚意识到,查看您的代码,您正在使用 jQuery 1.5.1 和(我假设).NET 提供的 jQuery.validate。不幸的是,这两者还没有一起工作。您必须前往此处获取适用于最新 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 移到 table 标记之外,它就可以正常工作。

于 2011-03-17T18:15:15.693 回答
0

我认为您问题的根源在于使用了非法的 html 语法: <tr>标签只能包含<td>标签。
在大多数情况下,像您这样的结构不会在浏览器中正确呈现,尤其是在异步加载时。

于 2014-03-11T12:48:05.650 回答