问题
我有一个可以由用户编辑的字段列表。当提交模型时,我想检查这些字段是否有效。我不能使用数据注释,因为每个字段都有不同的验证过程,在运行时我将不知道。如果验证失败,我使用 ModelState.AddModelError(string key, string error)
其中关键字是要将错误消息添加到的html元素的名称。由于有一个字段列表,Razor生成的html项目的名称是像Fields[0].DisplayName
的。我的问题是有没有一种方法或一种方式从视图模型中获取生成的html名称的键。
尝试的解决方案
我尝试了使用关键字的toString()
方法,但没有成功。我还浏览了HtmlHelper
类,但没有看到任何有用的方法。
代码片段
视图模型
public class CreateFieldsModel
{
public TemplateCreateFieldsModel()
{
FreeFields = new List<FieldModel>();
}
[HiddenInput(DisplayValue=false)]
public int ID { get; set; }
public IList<TemplateFieldModel> FreeFields { get; set; }
public class TemplateFieldModel
{
[Display(Name="Dispay Name")]
public string DisplayName { get; set; }
[Required]
[Display(Name="Field")]
public int FieldTypeID { get; set; }
}
}
控制器
public ActionResult CreateFields(CreateFieldsModel model)
{
if (!ModelState.IsValid)
{
//Where do I get the key from the view model?
ModelState.AddModelError(model.FreeFields[0], "Test Error");
return View(model);
}
}