【问题标题】:validation problem with MVC 1MVC 1 的验证问题
【发布时间】:2010-12-29 16:37:56
【问题描述】:

编辑.aspx:

<th>Calendar<input id="datepicker" name="datepicker" type="text" class="input-box"/></th>

控制器动作:

    // POST: /Studenti/Edit/5

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Edit(int[] rb, int id, string datepicker)
    {
        List<nastava_prisustvo> nastava = new List<nastava_prisustvo>();
        if (String.IsNullOrEmpty(datepicker))
            ModelState.AddModelError("datepicker", "First name is required");
        try
        {
            if (ModelState.IsValid)
            {
                string poruka = "";
                for (int i = 1; i <= rb.Length; i++)
                {
                    string name = "chk" + i;
                    string selID = Request.Form[name];

                    if (selID == "on")
                    {

                        nastava.Add(new nastava_prisustvo
                        {
                            br_indexa = int.Parse(Request.Form["id_stud" + i]),
                            id_predmet = id,
                            datum = System.DateTime.Parse(Request.Form["datepicker"])
                        });
                    }
                }
                return View("show", nastava);
            }
        }
        catch(Exception ex){

            ModelState.AddModelError("*", "An unexpected error occurred.");
        }
        return View("show", nastava);
        }

    }

如何验证日期选择器字段?如果未选择日期并显示适当的消息,如何停止发布数据。我使用 ASP>NET MVC 1 并阅读了这个 http://www.superexpert.com/Blog/archive/2008/09/09/asp-net-mvc-tip-42-use-the-validation-application-block.aspx 但没有解决我的问题

【问题讨论】:

    标签: c# asp.net asp.net-mvc


    【解决方案1】:

    我会坚持服务器端验证。试试这个:

    DateTime datePosted;
    if (!DateTime.TryParse(Request.Form["datepicker"], out datePosted))
    {
        this.ModelState.AddModelError("datepicker", "Invalid Date!");
    }
    
    if (this.ModelState.IsValid)
    {
        return View("show", nastava);
    }
    else
    {
        // return your GET edit action here
        return Edit(5);
    }
    

    您的编辑视图将自动传递任何验证错误,您可以将它们与验证摘要一起显示。

    <%= Html.ValidationSummary() %>
    

    【讨论】:

    • 如何在查看页面上发布此错误或此代码在页面上自动添加错误
    • 我更新了我的代码,但是当用户未设置日期时,此代码不会在查看页面中写入消息
    • 我会重构你的方法,去掉 try catch 块,使用 TryParse 方法来获取和验证 int 和 date 值,并且只在一切完成之后但在你之前检查 ModelState.IsValid返回您的视图。
    【解决方案2】:

    如果您想在回发之前验证日期,您将不得不使用客户端验证。 xVal 是一个流行的插件。

    对于服务器端验证,您需要查看模型绑定和模型验证。

    【讨论】:

      【解决方案3】:

      ASP.NET MVC 不使用您在 ASP.NET 中使用的那种控件。基本上你必须在 JavaScript 代码中手动完成大部分事情,而在 ASP.NET 中它会自动生成该代码。

      我会使用 JQuery 或其他东西来验证按钮单击时控件中的数据。

      【讨论】:

      • 数据注释验证器做什么:superexpert.com/blog/archive/2008/09/10/…
      • 我不会仅仅依靠 Javascript 来验证您的日期。您还需要服务器端验证。在 MVC 中有很多方法可以做到这一点。 Ryan B 已发布 1 条方式。
      【解决方案4】:

      既然您已经使用自己的 Javascript 在客户端上进行了验证,请尝试使用 jQuery UI 数据选择器: http://jqueryui.com/demos/datepicker/

      然后,最简单的,在服务器端,你可以把字符串值“datepicker”转换成try/catch。

      var dtDatePicker = new DateTime();
      try
      {
        dtDatePicker = Convert.ToDateTime(datepicker);
        // worked, carry on
      }
      catch
      {
        // didn't work, invalid date.
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-12
        • 1970-01-01
        • 1970-01-01
        • 2011-01-02
        • 2015-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多