在视图中使用IEnumerable时客户端验证不起作用?

时间:2012-08-02 10:27:39

标签: asp.net-mvc-3 razor unobtrusive-validation

我从List传递List来查看,所以我在视图中指定了这样的 IEnumerable的。在这种情况下,客户端验证不会触发

查看:

@model  IEnumerable<ShoppingCart.Models.ShoppingClass>
@{
    ViewBag.Title = "Display";

}
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>

@Html.ValidationSummary(true)
@using (Html.BeginForm())
{

    <table>
        <tr>
            <td>@Html.Label("BrandName")
            </td>
            <td>@Html.TextBox("BrandName")
                <div>
                    @Html.ValidationMessage("BrandName")</div>
            </td>
            <td>
                <input type="submit" value="Search" name="Search" />
            </td>
        </tr>
    </table>

}

1 个答案:

答案 0 :(得分:1)

你所写的是错的。

您的视图是强类型的,但是您没有使用强类型属性或验证消息。此外,您已经在表单之外获得了验证摘要..这将无效。

@using (Html.BeginForm())
@Html.ValidationSummary(true)

然后,你需要做这样的事情:

<table>
    @foreach (ShoppingClass shoppingClass in Model) {
    <tr>
        <td>@Html.LabelFor(x => x.BrandName)
        </td>
        <td>@Html.TextBoxFor(x => x.BrandName)
            <div>
                @Html.ValidationMessageFor(x => x.BrandName)</div>
        </td>
    </tr>
    }
</table>
<input type="submit" value="Search" name="Search" />

我不确定为什么每个进入同一个控制器和动作的项目都有一个搜索按钮..但我会留下让你弄清楚。