ASP.NET MVC-确定字段在Razor视图中是否有错误



我正在ASP.NET MVC中开发一个输入表单。我的输入表单如下:

@using (Html.BeginForm("Result", "Contact", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { role="form" }))
{
  <h4>What do you want to tell us?</h4>
  @Html.ValidationSummary(true, "", new { @class = "text-danger" })
  <div class="form-group label-floating">
    <label class="control-label" for="Subject">Subject</label>
    <input class="form-control" id="Subject" name="Subject" type="text">
  </div>
  <div class="form-group">
    <input type="submit" value="Send" class="btn btn-primary btn-raised" />
  </div>
  @Html.AntiForgeryToken()
}

我在这个表单后面的模型看起来是这样的:

public class ContactModel
{
  [Required(ErrorMessage="Please enter the subject.")]
  [Display(Name="Subject")]
  public string Subject { get; set; }
}

我想根据模型是否有效来有条件地应用类和结构。我还想按字段进行。我的问题是,在Razor中,如何确定"Subject"属性是否有效,或者它是否有错误?谢谢

虽然ValidationMessageFor是显示验证错误的标准方法,但以下代码完全符合您的要求,在极少数情况下可能很有用:

@if (!ViewData.ModelState.IsValidField("Subject"))
{
    //not valid condition
}

正如评论和@PeterB所说,为了显示每个输入的验证消息,应该在视图上与您的输入接近的地方使用Html.ValidationMessageFor方法。但我想注意的是:你有一个模型,但没有在表单中使用它。更重要的是,你有用于客户端和服务器验证和标记的数据注释,也不要在视图中使用它们。

请查看此方法以了解您的观点:

@model /*your.possible.namespace.*/ContactModel
...
@using (Html.BeginForm("Result", "Contact", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { role="form" }))
{
    <h4>What do you want to tell us?</h4>
    <div class="form-group label-floating">
        @Html.LabelFor(m => m.Subject, new { @class = "control-label" })
        @Html.TextBoxFor(m => m.Subject, new { @class = "form-control", @id = "Subject" })
        @Html.ValidationMessageFor(m => m.Subject)
    </div>
}

此代码段应显示您在发布表单后在Required数据注释的ErrorMessage属性中描述的错误消息。您可以发现启用不引人注目的验证很有用。

您可以在ASP.NET MVC指南中找到一篇关于验证的文章。

附言:别忘了在控制器中执行服务器端验证(例如)。

在控制器中,您可以使用ModelState.IsValid查看是否存在错误,也可以使用ModelState["nameOfField"]查看特定字段是否存在错误。

在视图中,您可以使用Html.ValidationSummary()(显示所有错误,如果有)或Html.ValidationMessageFor()(显示特定控制的错误,如果有的话)。例子很多,既有on&off StackOverflow。

最新更新