MVC 3 - 仅显示/使用某些模型属性

时间:2012-03-16 10:56:01

标签: asp.net-mvc-3

对MVC 3来说还不太新,我不确定最好的方法。假设我有一个像这样的简单类......

Public Class PDetail

    <Required>
    Public Property FirstName As String

    <Required>
    Public Property LastName As String

    <Required>
    Public Property CellNo As String

    <Required>
    Public Property PassportNo As String

    <Required>
    Public Property Nationality As String

    Public Property ExtraRequirements As String

End Class

这用于创建我的模型。在预订过程中,我可能会在视图上提示这些值。但是根据预订的类型,我可能不希望问一些这些问题。例如,如果预订不涉及到外国,我可能不需要PassportNo和国籍。

处理这个问题的最佳方法是什么?简单的方法似乎是有一个单独的属性,确定哪些字段显示为EditorFor,其他字段使用HiddenFor。但这是明智的吗?此外,在服务器端验证时,隐藏字段仍然有效。

上面的课程是我实际做的简化版本。根据预订的类型,我有多达10个可以独立显示或隐藏的字段,因此为每个组合创建一个单独的模型将是一场噩梦。

3 个答案:

答案 0 :(得分:1)

史蒂夫·桑德森向only validate incoming values发布了一个很好的方法,尽管你仍然需要在你的域中验证模型,以防止恶意攻击。

您需要使用here描述的原则(使用案例的Bind属性)保护自己免受质量分配攻击。

答案 1 :(得分:0)

您可以查看与FluentValidation.NET完美集成的ASP.NET MVC,并使此类验证方案非常简单。与数据注释使用的声明性方法相比,它使用命令式方法,正如您所描述的那样,它可能是梦魇

答案 2 :(得分:0)

您可以通过实施IValidatableObject界面,根据您的预订检查验证。

阅读this帖子了解详情。