asp.net-mvc-3 – 在MVC 3视图模型上使用Editable属性
|
我希望使用属性将视图模型属性标记为只读,以便视图字段只在渲染视图中读取.应用System.ComponentModel.DataAnnotations.EditableAttribute似乎是我需要的确切属性,但它似乎不起作用,即文本框字段仍然可以编辑.我环顾四周,找不到答案,只找到一些相关的问题.下面应用的可编辑属性在呈现视图时不起作用. [Display(Name = "Last Name")]
[Editable(false,AllowInitialValue = true)]
public string LastName { get; set; }
我可以使用像这样的视图助手函数来实现只读行为,但我的偏好是在模型属性上使用属性. @functions {
object getHtmlAttributes()
{
if (@ViewBag.Mode == "Edit")
{
return new {style = "width:100px;background:#ff6;",@readonly = "readonly"};
}
return new { style = "width:100px;" };
}
}
@Html.TextBoxFor(model => model.FirstName,getHtmlAttributes())
其他属性完全正常,包括自定义验证属性.您能否告诉我数据注释可编辑属性是否在此上下文中起作用,应该如上所述那样工作还是需要做其他事情?谢谢. 解决方法EditableAttribute documentation声明:
不幸的是,这意味着使用此属性对MVC中的验证没有任何影响.这感觉不对,但是如果你想一想在MVC框架中实现它需要什么,这是有道理的.例如,在典型的“编辑”视图中,用户执行初始GET请求,其中填充模型(通常来自DB记录)并将其提供给要呈现给用户的视图.然后用户进行一些编辑,然后提交表单.提交表单会导致从POST参数构造Model的新实例.验证器很难确保该字段在两个对象实例中具有相同的值,因为其中一个实例(来自GET请求的第一个实例)已经被处理掉了. 好吧,如果属性没有功能,为什么甚至懒得使用它? 我最好的猜测是他们希望开发人员在他们的代码中使用它来显示意图.更实际的是,您还可以编写自己的自定义代码来检查此属性的存在… AttributeCollection attributes = TypeDescriptor.GetAttributes(MyProperty);
if (attributes[typeof(EditableAttribute)].AllowEdit)
{
// editable
}
else
{
// read-only
}
还要记住,这些DataAnnotation属性不仅适用于MVC应用程序,它们还可用于许多不同类型的应用程序.即使MVC没有对此属性做任何特殊处理,other frameworks have implemented functionality/validation for this attribute. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 通过web.config覆盖machine.config
- 从代码隐藏调用ASP.NET Web API
- asp.net-web-api – 标题中的API密钥与swashbuckle
- asp.net – App Settings和connectionStrings配置设置中连接
- ASP.NET中的%%(嵌入式代码块)
- asp.net-mvc – 最佳实践:在web api控制器中处理错误和异常
- asp.net – 在ASP MVC3中,如何使用uri执行控制器和动作?
- asp.net-mvc – 如何在实体框架中为GUID设置NewId()
- asp.net-mvc-4 – 在ASP.NET MVC中包文件位置
- asp.net-mvc – 从业务逻辑类重定向asp.net mvc页面
