asp.net-mvc - MVC : Make model parameter required only on certain views

标签 asp.net-mvc annotations required

为模型定义参数后

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

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

最佳答案

is it posible to change the properties of this parameters for certain view?



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

正确的方法是使用 View 模型:
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 个 View 提交表单时将调用的您各自的 Controller 操作将与 View 模型一起使用:
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)
    {

    }
}

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

关于asp.net-mvc - MVC : Make model parameter required only on certain views,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14348144/

相关文章:

Java - 使用注解自动实现服务定位器模式

grails - grails中两个 Action 签名之间的区别

Excel VBA - WorksheetFunction.CountA 错误 - 需要对象

jquery - 消除部分 View MVC 3 Razor 中的重复 ID

javascript - AJAX 调用 ASP MVC 操作

javascript - subview 模型修改不同的 subview 模型

iphone - 删除/添加注释到 map View 会导致内存泄漏

javascript - 在 Razor 生成的隐藏字段上强制执行类型,在 JavaScript 中接收变量而不进行强制转换

mercurial - hg push abort : http authorization required. 我正在推送到我的本地 bitbucket 存储库

java - fragment 错误 : Incompatible Types Required: android. support.v4.app.Fragment,找到 : package_name. app_name.Fragment_name