【问题标题】:MVC - Data annotations for controlsMVC - 控件的数据注释
【发布时间】:2015-04-13 14:56:09
【问题描述】:

您能否解释一下如何将数据注释应用到自定义控件?

示例: 型号

public class ToDo
{
    [Required]
    public int ListId { get; set; }
}

查看

<form action="/Todo/Submit" method="post">
    <input type="text" name="txtListId" /><br />
    <input type="submit" name="btnSubmit" />
</form>

当用户没有在txtListId中输入任何内容时,如何确保使用数据注释?

我知道在我的自定义模型绑定器中 - 我可以使用 bindingcontext.valueprovider 来获取尝试值并检查它是否为空或空并将错误添加到模型状态或使用 try - catch 块来捕获格式异常并使模型状态无效。

但在上述方法中 - 并没有真正使用数据注释。

请在这方面指导我。

谢谢你, 萨沙

【问题讨论】:

  • 使 ListId 可以为空。然后还要确保您也显示 ValidationMessageFor(如果您决定这样做)。

标签: asp.net-mvc-3 asp.net-mvc-4 asp.net-mvc-5 data-annotations model-binding


【解决方案1】:

使用正确的字段将是一个好的开始。您已指定ListId 是必需的,但您从未使用ListId,而是使用txtListId。你真的应该使用 Razor 助手来生成你的输入:

@Html.TextBoxFor(m => m.ListId)

简而言之,只需正确命名您的输入:

<input type="text" name="ListId" />

【讨论】:

  • 谢谢克里斯。场景是 - 如果控件名称与模型属性名称不匹配怎么办。
【解决方案2】:

要显示验证消息,假设您正在使用 Razor 视图引擎并且您的视图绑定到模型 Todo,您必须使用以下行:

<%= Html.ValidationMessageFor(m=>m.ListId) %>

这将导致验证消息显示在页面上。因此,您的视图必须如下所示:

@Html.TextBoxFor(m => m.ListId)
<%= Html.ValidationMessageFor(m=>m.ListId) %>

此外,在控制器中,您需要检查以验证模型状态:

if (ModelState.IsValid)
{
    //take some action
    //maybe, add to DB or whatever
}
else
    return view(); // render the view again

【讨论】:

    猜你喜欢
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 2011-12-23
    相关资源
    最近更新 更多