超文本标记语言beginform验证服务器端和客户端

本文关键字:客户端 服务器端 验证 beginform 超文本标记语言 | 更新日期: 2023-09-27 18:07:19

正在做我的第一个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 to my view:

@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在DB中,但supID没有任何值。我期待在控制器进行之前,我会在网页上看到错误消息。

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

超文本标记语言beginform验证服务器端和客户端

假设您始终使用相同的视图模型(并且为了清晰起见,您翻译并缩短了),您应该在post action中获得视图模型。然后,您可以使用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。也许你还遗漏了什么?

希望这对你有帮助!