zoukankan      html  css  js  c++  java
  • 关于MVC中模型model的验证问题

        今天在做项目练习的时候发现,MVC中使用自带的模型验证时会提前显示在界面上,比如下面所示:

    image

        这是什么原因了,是因为我在表示get请求的action里面返回了其界面所显示使用的model,我们知道mvc的请求路径是分为3步的。

       1:浏览器发送请求,经过底层路由的解析到达控制器,从而到达Action中。

       2:在Action中我们进行常规的处理,(调用业务逻辑,操作数据库等),返回到指定的页面HTML中。

       3:浏览器渲染页面,显示一些我们需要知道的内容出来。

    这是简单的一些流程,那么我们为什么会出现那个错误提示,那个本应该是在表单提交之后,要是有错误或者不符合要求才需要显示的,这个错误就是我们配置和action中返回值的问题。

    之前出现上图的问题我的M和C中代码是这样的。

    M:

        public class CreateResponseTextMessageView
        {
            [Display(Name="响应文本内容"),Required(ErrorMessage ="内容不能为空")]
            public string Context { get; set; }
            public DateTime CreateTime { get; set; }
        }

    C:

            [HttpGet]
            public ActionResult Create(CreateResponseTextMessageView model)
            {
                return View(model);
            }

    V:

                                        <div class="form-group">
                                            @Html.LabelFor(x => x.Context, new { @class = "col-sm-2 control-label" })
                                            <div class="col-sm-5">
                                                @Html.TextAreaFor(x => x.Context, new { @class = "form-control", placeholder = "文本内容" })
                                            </div>
                                            <div class="col-sm-4">
                                                <div class="help-block">@Html.ValidationMessageFor(x => x.Context)</div>
                                            </div>
                                        </div>

    这里可以看到我们在action中返回了model,其实这是多余的,我们在post的时候准备的验证,现在就提前起作用了,只有让action不返回任何东西,这样我们的验证才不会启动,这样就没有了刚打开页面就出现了错误信息,这是非常不友好的用户体验。

            [HttpGet]
            public ActionResult Create()
            {
                return View();
            }

    这样不让其有返回值,不触动验证,那么就不会提前出现验证提示消息。

    image

    我们这个验证的用处是在表单提交(POST)之后,在处理页面进行验证的时候才使用,当我们没有通过验证时,就会返回空的model到前台页面,这样就会触动验证提示。

    image

    01

  • 相关阅读:
    codeforces707B:Bakery
    codeforces707A:Brain's Photos
    BZOJ1084 [SCOI2005]最大子矩阵
    BZOJ1264 [AHOI2006]基因匹配Match
    BZOJ2764 [JLOI2011]基因补全
    codevs1257 打砖块
    BZOJ1079 [SCOI2008]着色方案
    BZOJ1026 [SCOI2009]windy数
    菜鸟学自动化测试(一)----selenium IDE
    关于w3school的html5部分output 元素实例代码(点亲自试一试进去)的问题纠正
  • 原文地址:https://www.cnblogs.com/netxiaohui/p/5713088.html
Copyright © 2011-2022 走看看