我不需要意见。我想要下面这个问题的答案。 我知道在我的模型类中,我可以包含数据注释来验证我的表单:
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" })
我的问题是...最好的做法是仅在模型中验证还是在 View 本身中验证?在维护安全方面什么更安全?
如果这是一个错误的问题,请告诉我,我会尽快将其删除。
谢谢
最佳答案
Html.ValidationMessageFor
将根据模型中的属性生成所需的 HTML。因此,如果您的模型具有如下属性:
public string Name { get; set; }
那么什么也不会生成。但是,如果你有这个:
[Required]
public string Name { get; set; }
然后生成的 HTML 将包含此字段的必填信息。因此,您将获得 JavaScript 支持,以确保用户在提交表单之前填写该字段。换句话说,仅仅因为您拥有 Html.ValidationMessageFor
并不意味着您获得了验证。您仍然需要模型上的数据注释来帮助 View 引擎生成 HTML 属性,例如 required="required"
等。
使用 JavaScript 在客户端进行验证是为了方便和更好的用户体验。但是,即使您已经在客户端上验证了数据,您也应该始终在服务器上进行验证。不要相信客户。另外,在某些情况下,JavaScript 可能会被禁用,因此您的 JavaScript 验证可能永远不会被触发,因此,这是您应该始终在服务器端执行验证的另一个原因。
关于javascript - 我的数据应该在 ASP.NET MVC 应用程序中的何处进行验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52784544/