Html.beginform验证服务器和客户端

时间:2016-09-15 19:53:02

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

使用我的第一个ASP.NET MVC应用程序并遇到一些表单验证问题。

我有我的模特:

public class InfoFormEmplModel
{
    public int supID { get; set; }
    public string description { get; set; }

    public InfoFormEmplModel() {}

}

请注意,此模型不代表我的数据库中的任何表格。

现在,在我看来:

@using Portal.Models
@model InfoFormEmplModel
@{
    ViewBag.Title = "Form";
 }


@using (Html.BeginForm())
{
    <b>Sup</b> @Html.TextBoxFor(x => x.supID)

    <p>Description</p>
    @Html.TextAreaFor(x => x.description)<br><br>

    <input type="submit" name="Save" value="Soumettre" />
}

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

我需要进行一些验证,字段不能为空,我还必须检查我的数据库中是否存在supId(服务器端验证)

我尝试为我的模型添加一些验证:

public class InfoFormEmplModel
    {
        [Required (ErrorMessage = "Superior ID required")]
        public int supID { get; set; }

        [Required (ErrorMessage = "Description required")]
        public string description { get; set; }

        public InfoFormEmplModel() {}        
    }

并将@ Html.ValidationMessageFor添加到我的视图中:

@using Portal.Models
    @model InfoFormEmplModel
    @{
        ViewBag.Title = "Form";
     }


    @using (Html.BeginForm())
    {
        <b>Sup</b> @Html.TextBoxFor(x => x.supID)
        @Html.ValidationMessageFor(x => x.supID)

        <p>Description</p>
        @Html.TextAreaFor(x => x.description)<br><br>
        @Html.ValidationMessageFor(x => x.description)

        <input type="submit" name="Save" value="Soumettre" />
    }

    @section Scripts {
        @Scripts.Render("~/bundles/jqueryval")
    }

我的控制器看起来像这样:

[HttpPost]
public PartialViewResult invform(InfoFormEmplModel form)
    {

        //check if supID exists
        bool exists = librairie.supExists(form.supID);
        if (!exists)
        {
            return PartialView("ErreurDuplicat");
        }

        return PartialView("Success");
    }

当我将supID留空时,似乎没有发生验证。我的控制器将我的模型发送到另一个类,检查超级用户ID是否在数据库中,但是supID没有任何值。我期待在控制器继续之前,我会在网页上看到错误消息..

此外,一旦我检查了数据库中是否存在supID,如何在我的视图中显示错误消息,以便用户可以输入有效的supID?

1 个答案:

答案 0 :(得分:2)

假设您始终使用相同的视图模型(并且为了清晰起见而翻译和缩短),您应该在后期操作中获取视图模型。然后,您可以使用 ModelState 属性根据验证注释检查收到的模型是否有效。

如果你的模型有效,你可以在服务器端检查SupId,如果你想设置一个错误,如果这样的Id已经存在,你可以按照以下代码片段进行操作:

[HttpPost]
    public ActionResult invform(InfoFormEmplModel form)
    {
        if (ModelState.IsValid)
        {
            //set an error when the id exists    
            ModelState.AddModelError("supId", "The Id is already in use. Please chose a different Id");
            return View(form);
        }

        return View(form);
    }

因为其他错误是不可能的,所以你收到一个空id,因为它是一个int。所以也许你错过了其他的东西?

希望这有帮助!