使用我的第一个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?
答案 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。所以也许你错过了其他的东西?
希望这有帮助!