asp.net-mvc - 实体框架 - 数据注释范围验证器抛出异常而不是显示错误消息
问题描述
我正在尝试创建一个关于公司供应商注册的表格。必填字段之一是工人数量。
我在表单模型中添加了范围验证器,如下所示。
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
[Required(ErrorMessage = "Form Number is required!")]
public int FormNo { get; set; }
[Required(ErrorMessage = "Please fill in the Number of Workers field!")]
[Range(0, 20, ErrorMessage = "Please enter positive number only!")]
public int NWorkers { get; set; }
每次输入超出范围时,它都会抛出异常而不是显示 ErrorMessage。
System.Data.Entity.Validation.DbEntityValidationException: 'Validation
failed for one or more entities. See 'EntityValidationErrors' property
for more details.'
如果输入在范围内,则可以正常工作。
这是我的控制器
public class FormController : Controller {
private AppDbContext db = new AppDbContext();
// GET: Form
public ActionResult Index() {
return View(db.Forms.ToList());
}
[HttpGet]
public ActionResult Create() {
return View();
}
[HttpPost]
public ActionResult Create(Form form) {
form.CreatedAt = DateTime.Now;
form.UpdatedAt = DateTime.Now;
db.Forms.Add(form);
db.SaveChanges();
return RedirectToAction("index", "form");
}
}
这是我的看法
<form class="form-horizontal" action="@Url.Action("create", "form")" method="post">
@if (!ViewData.ModelState.IsValid) {
<div class="alert alert-danger">
@Html.ValidationSummary(false, "")
</div>
}
<div class="form-group">
<label class="col-md-3 control-label" for="FormNo">Form Number</label>
<div class="col-md-3">
@Html.TextBox("FormNo", null, new { @class = "form-control required", @required = "true" })
</div>
<span class="col-md-3 pull-right note">Note : * is required</span>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="NWorkers">Number of Workers</label>
<div class="col-md-3 required">
@Html.TextBox("NWorkers", null, new { @class = "form-control" })
<!-- <input type="text" class="form-control" id="NWorkers" name="NWorkers" value="0" /> -->
</div>
</div>
<div class="box-footer">
<div class="col-md-offset-3">
<button type="submit" class="btn btn-primary">
<i class="fa fa-btn fa-floppy-o"></i> Save
</button>
<a onclick="history.back();" class="btn btn-warning">
<i class="fa fa-reply"></i> Cancel
</a>
</div>
</div>
</form>
编辑
堆栈跟踪
" 在 System.Data.Entity.Internal.InternalContext.SaveChanges()\r\n
在 System.Data.Entity.Internal.LazyInternalContext.SaveChanges()\r\n
在 System.Data.Entity.DbContext.SaveChanges()\ r\n 在 C:\Users\PC17A196\source\repos\HSE\HSE\Controllers\FormController.cs:line 28\r\n 中的 HSE.Controllers.FormController.Create(Form form) 处 lambda_method(Closure , ControllerBase , Object[] )\r\n
在 System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase 控制器,Object[] 参数)\r\n 在 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary2 parameters)\r\n at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary
2 个参数)\r\n 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState)\r\n 在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult2.CallEndDelegate(IAsyncResult asyncResult)\r\n at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase
1.End()\r\ n 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)\r\n 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.b__3d()\r\n 在 System.Web.Mvc.Async。 AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.b__3f()" 字符串
解决方案
推荐阅读
- reactjs - 如何在 i18next 配置中使用 cookie?
- godot - Godot索引和键盘同时
- prometheus - 普罗米修斯 json 指标
- java - 如何在java中将字符串转换为二进制utf-16和二进制到字符串?
- pandas - 如何在 python 中导入 CSV 文件?
- java - 仅使用属性值的第一部分通过 xpath 查找元素
- flutter - Flutter:到达嵌套水平滚动的末尾时滚动到下一页
- rust - 为什么将字段从 `&'a [u8]` 更改为 `&'a mut [u8]` 会导致生命周期错误?
- javascript - 如何使用 paypal-rest-sdk 消除验证错误?
- php - PHP使用公共静态函数从其他页面获取数据