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

use*_*192 4 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()
}
Run Code Online (Sandbox Code Playgroud)

这个表单背后的模型如下所示:

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

我想根据模型是否有效来有条件地应用类和结构。我也想按领域做。我的问题是,在 Razor 中,如何确定“主题”属性是否有效,或者是否有错误?谢谢!

Pau*_*les 7

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

@if (!ViewData.ModelState.IsValidField("Subject"))
{
    //not valid condition
}
Run Code Online (Sandbox Code Playgroud)


And*_*lov 0

正如评论和 @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>
}
Run Code Online (Sandbox Code Playgroud)

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

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

PS:并且不要忘记在控制器中执行服务器端验证(例如)。