【发布时间】:2017-08-30 10:56:36
【问题描述】:
在我的 ASP.NET MVC Core 1.1.1 中,我有一个输入如下的表单,用户需要输入两个字符的地区代码,例如 01、02、...10、11 等。但是,当我通过输入区代码(例如 123)提交表单时,它仍然成功提交表单,而不会强制用户输入两个字符的区代码。我可能缺少什么?
MyViewModels
...
[Display(Name = "District"),StringLength(2)]
public string Dist { get; set; }
...
表格
@model MyProj.Models.MyViewModel
...
<div class="form-group">
<label asp-for="Dist" class="col-md-2 control-label"></label>
<div class="col-md-2">
<input asp-for="Dist" class="form-control" />
<span asp-validation-for="Dist" class="text-danger"></span>
</div>
<div class="col-sm-pull-8">01 to 53 — district codes</div>
</div>
...
注意
我正在使用带有最新版本 VS2017 的默认 ASP.NET Core Web Application 模板,当使用此类模板时,默认情况下会安装必要的 Bootstrap 和其他 javascript。
【问题讨论】:
-
您是否添加了客户端javascript进行验证?尝试检查,在服务器(操作)中 ModelState 是否有效,如果无效检查原因是否是 Dist 属性,如果它说它无效,发生的情况是您没有在客户端验证(javascript)跨度>
-
@dime2lo 我在上面的帖子中添加了一个 NOTE 来回答您的问题,其他读者可能也有。
-
您是否检查过模型是如何到达服务器的(如果 ModelState 有效)?如果它应该是无效的,那么问题出在客户端。也许我错了,但您必须添加 javascript 客户端验证部分。
@section Scripts { @{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); } } -
如何注册 MVC 中间件(
.AddMvc或.AddMvcCore)。我问的是因为应该注册 MVC 数据注释服务,并且这仅使用AddMVC自动完成,否则您需要直接调用AddMvcCore().AddDataAnnotations()。见stackoverflow.com/q/44979691/2833802 -
@Set
ConfigureServices(...)inStartUp.cs有AddMvc();在里面。
标签: asp.net-core model-validation