超文本标记语言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?
假设您始终使用相同的视图模型(并且为了清晰起见,您翻译并缩短了),您应该在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。也许你还遗漏了什么?
希望这对你有帮助!