ias*_*ons 6 forms asp.net-mvc repopulation
我有一个控制器有两个动作:
[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);
}
Run Code Online (Sandbox Code Playgroud)
如您所见,当表单发布其数据时,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");
}
Run Code Online (Sandbox Code Playgroud)
表单包含一个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的默认值.
我如何解决这个问题?我真的卡住了!
你能在你的PrepareViewDataForAddAction方法中做到这一点吗?
if (!ViewData.ModelState.IsValid)
{
ViewData["StartDate.Hour"] = "Error";
}
Run Code Online (Sandbox Code Playgroud)
表单上的其他字段仍将根据 Gig 对象的属性进行填充。
| 归档时间: |
|
| 查看次数: |
1085 次 |
| 最近记录: |