c# - 如何验证 MVC2 表单中的多选?

标签 c# razor asp.net-mvc-2-validation

这似乎是一个非常基本的场景,但我认为它没有圆满的结局。

我有一个简单的项目类:

public class Project 
{

    [Required(ErrorMessage = "Project title is required")]
    [DisplayName("Project Title")]
    public string Title { get; set; }

    [DisplayName("Related Categories")]
    public Category Categories { get; set; }

}

我想确保至少选择了一个相关类别。我如何在 View 中验证这一点,使用 Html.EnableClientValidation() 和模型中的装饰器?如果这不可能,退路是什么?

同样令人沮丧,并且可能阻碍验证的是我不能做...

<%= Html.ListBoxFor(m => m.Project.Categories,
                new SelectList(Model.Categories, "Id", "Name"))%>

...因为这将尝试将 Project.Categories 表单值(一个字符串数组)关联到应该是类别类型的内容,但不能(我收到错误“参数转换来自类型” System.String' to type failed because no type converter can convert between these types").因此,我必须将表单名称更改为类似 m.Categories 的名称,从而解除与 Product 类的关联,因此我想用任何验证逻辑来​​装饰它。

哇,对我来说这太疯狂了。我们无法使用 MVC2 装饰器验证简单的多选列表?

最佳答案

我将尝试给出一个答案,因为这就是我现在正在做的:

在我的 View 模型中,我输入:

    [Required(ErrorMessage = "A category is required")]
    public IEnumerable<Category> Categories { get; set; }

验证将在 UI 中进行。但是,modelstate 仍然没有在操作中显示为无效...因为绑定(bind)命名不完全匹配,所以这种方法当然不是很可靠,但我认为可以解决.

此外,这引出了一个有趣的观点,即可能使用 1:1 的 Action:ViewModel 关系。通过这样做,您可以在 View 模型中设置特定于 View 的验证。这与依赖验证实体不同,验证实体是更广泛的模型验证的一部分,这是 MVC 2 最终版本的方向。

相关性:

MVC 2 RC 2 中的模型验证:http://bradwilson.typepad.com/blog/2010/01/input-validation-vs-model-validation-in-aspnet-mvc.html

1:1 查看模型: Action 方法:http://www.lostechies.com/blogs/jimmy_bogard/archive/2009/06/29/how-we-do-mvc-view-models.aspx

关于c# - 如何验证 MVC2 表单中的多选?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2323167/

相关文章:

c# - CSHTML 文件未加载到 View 之外

asp.net-mvc - 使用Razor View 引擎输出Json

c# - 基于其他领域的验证?

asp.net-mvc-2 - ASP.NET MVC 2 中使用无模型 View 进行客户端验证

asp.net-mvc - ASP.NET MVC 2 RC 2 "Wizard"用于整个模型验证

C# 线程 - 在线程之间发布消息

c# - 如果一个类不*总是*创建 Foo 对象,那么将其称为 FooFactory 是错误的吗?

c# - 数据库中的 Asp.net MVC 页面标题

c# - 添加对象不起作用

java - 是否可以在 C# 中实现 JAVA 回调模式