asp.net-mvc – ASP.NET MVC表格重新填充
我有一个控制器有两个动作:
[AcceptVerbs("GET")] public ActionResult Add() { PrepareViewDataForAddAction(); return View(); } [AcceptVerbs("POST")] public ActionResult Add([GigBinderAttribute]Gig gig,FormCollection formCollection) { if (ViewData.ModelState.IsValid) { GigManager.Save(gig); return RedirectToAction("Index",gig.ID); } PrepareViewDataForAddAction(); return View(gig); } 如您所见,当表单发布其数据时,Add操作使用GigBinder(IModelBinder的实现) 在这个活页夹我有: if (int.TryParse(bindingContext.HttpContext.Request.Form["StartDate.Hour"],out hour)) { gig.StartDate.Hour = hour; } else { bindingContext.ModelState.AddModelError("Doors","You need to tell us when the doors open"); } 表单包含一个ID为“StartDate.Hour”的文本框. 如上所示,GigBinder测试用户是否在文本框中输入了一个整数,其中包含id“StartDate.Hour”.如果没有,则使用AddModelError将模型错误添加到模型状态. 由于gigs属性gigs.StartDate.Hour是强类型的,因此如果用户在表单文本框中键入了这个值,我就无法将其值设置为“TEST”. 因此,我无法设置gigs.StartDate.Hour的值,因为用户输入的是字符串而不是整数. 由于Add Action返回视图并传递模型(返回View(gig);)如果modelstate无效,当表单重新显示验证消息时,值“TEST”不会显示在文本框中.相反,它将是gig.StartDate.Hour的默认值. 我如何解决这个问题?我真的卡住了! 解决方法
我认为问题是你的ViewModel与你的View不够匹配.在MVC中,您的ViewModel尽可能地与View匹配,这一点非常重要.
在您的ViewModel中,您假设一个整数,但在您的View中,您使用TextBox来呈现属性,这将允许任何类型的文本.这里有一个不匹配的问题,你在尝试映射它们时遇到的困难是不匹配的症状. 我想你应该: 就个人而言,我建议选项1.这样ViewModel不依赖于View实现. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 如何将Bootstrap下拉式样应用于ASP.NET MVC
- IIS“SendResponse”状态下的请求已停留很长时间;慢IIS 7.5
- .net – 如何正确处理n层应用程序中的错误?
- asp.net – ADO.NET在.NET内核可能吗?
- asp.net – 使用ninject时出现异常
- .net – 有什么简单的方法可以将标准转换为HQL吗?
- asp.net-mvc – 尝试方法… HttpConfiguration …访问方法…
- asp.net-mvc-4 – 后退点击刷新页面 – MVC 4
- asp.net-mvc – 在mvc中的所有页面中维护查询字符串
- 在asp.net中是否有验证电子邮件地址的功能?
- .net – Real Life与SOLID开发合作
- asp.net – 防止百分比字符转换
- email – 如何检查是myMail.Send是true / false
- .net – 如何获取客户端DotNetOpenAuth.OAuth2返
- asp.net-mvc-3 – 如何使用剃刀包括.html或.asp文
- 你所不知道的ASP.NET Core MVC/WebApi基础系列 (
- ASP.NET / VB.NET:Dropdownlist SelectedIndexC
- 通过经典ASP调试activeX dll
- asp.net – 如何在不使用global.asax的情况下添加
- asp.net-mvc – ASP.NET MVC,将Model从View传递给