我不想发表意见。我想在下面回答这个问题。 我知道在我的模型类中,我可以包含数据注释以验证表单:
public class Movie
{
public int Id { get; set; }
public string Title { get; set; }
[Display(Name = "Release Date")]
[DataType(DataType.Date)]
[DisplayFormat(ApplyFormatInEditMode =true, DataFormatString = "{0:yyy-MM-dd}")]
public DateTime ReleaseDate { get; set; }
public string Genre { get; set; }
[DataType(DataType.Currency)]
public decimal Price { get; set; }
}
但是,已经有JavaScript库可以验证默认行为(即@Html.ValidationMessageFor()
):
<div class="form-group">
@Html.LabelFor(model => model.Title, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Title, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Title, "", new { @class = "text-danger" })
我的问题是...最好是仅在模型中或在视图本身中进行验证?在维护安全性方面,更安全的是什么?
如果这是一个错误的问题,请告诉我,我会尽快将其删除。
谢谢
答案 0 :(得分:4)
Html.ValidationMessageFor
将根据模型中的属性生成所需的HTML。因此,如果您的模型具有这样的属性:
public string Name { get; set; }
然后什么也不会产生。但是,如果您有这样的话:
[Required]
public string Name { get; set; }
然后,生成的HTML将具有此字段必填信息。因此,您将获得JavaScript支持,以确保用户在提交表单之前填写该字段。换句话说,仅拥有Html.ValidationMessageFor
并不意味着您将获得验证。您仍然需要模型上的数据注释,以帮助视图引擎生成HTML属性,例如required="required"
等。
使用JavaScript在客户端上进行验证是为了方便和提供更好的用户体验。但是,即使您已在客户端上验证了数据,也应始终在服务器上进行验证。不要信任客户。另外,在某些情况下,可能会禁用JavaScript,因此您的JavaScript验证可能永远不会触发,因此,这也是您始终要在服务器端执行验证的另一个原因。