加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – ASP.NET MVC表格重新填充

发布时间:2020-12-16 03:53:10 所属栏目:asp.Net 来源:网络整理
导读:我有一个控制器有两个动作: [AcceptVerbs("GET")] public ActionResult Add() { PrepareViewDataForAddAction(); return View(); }[AcceptVerbs("POST")] public ActionResult Add([GigBinderAttribute]Gig gig,FormCollection formCollection) { if (ViewD
我有一个控制器有两个动作:

[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属性的类型更改为string,然后在控制器中进行验证,以确保输入的字符串实际上是数字或:
2.将View呈现的控件更改为只允许通过自定义控件或Javascript验证输入数字的控件(如@Qun Wang建议的那样)

就个人而言,我建议选项1.这样ViewModel不依赖于View实现.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读