4

为模型定义参数后

[Required(AllowEmptyStrings = false, ErrorMessage = "No null")]
[DisplayName("Name")]
public string Name { get; set; }

是否可以为某些视图更改此参数的属性?例如,我希望这些属性(必需的属性)适用于 view1、view2 和 view3,但不适用于 view4。我可以为 view3 禁用此属性吗?

4

1 回答 1

6

是否可以为某些视图更改此参数的属性?

不,属性在编译时被烘焙到程序集中。

正确的方法是使用视图模型:

public class CreateViewModel
{
    [DisplayName("Name")]
    public string Name { get; set; }
}

public class EditViewModel
{
    [Required(AllowEmptyStrings = false, ErrorMessage = "No null")]
    [DisplayName("Name")]
    public string Name { get; set; }
}

并且在从 2 个视图提交表单时将调用的您各自的控制器操作将与视图模型一起使用:

public ActionResult Create(CreateViewModel model)
{
    ... the name will not be required here
    if (ModelState.IsValid)
    {

    }
}


public ActionResult Edit(EditViewModel model)
{
    ... the name will be required here
    if (ModelState.IsValid)
    {

    }
}

替代方法将包括自定义模型绑定器或实现IValidatableObject接口,并根据当前操作进行一些动态验证。简而言之,你正在走向深渊。就个人而言,这不是我会搞砸的事情,但是如果您不喜欢我推荐的解决方案,请随时朝那个方向探索。

于 2013-01-15T22:55:08.707 回答