为模型定义参数后
[Required(AllowEmptyStrings = false, ErrorMessage = "No null")]
[DisplayName("Name")]
public string Name { get; set; }
是否可以针对某些 View 更改此参数的属性?例如,我希望这些属性(必需的属性)为 view1、view2 和 view3 保留,但不为 view4 保留。我可以为 view3 禁用此属性吗?
最佳答案
不,属性在编译时被烘焙到程序集中。
正确的方法是使用 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/