【问题标题】:ASP.NET MVC - Determine if field has an error in Razor viewASP.NET MVC - 确定 Razor 视图中的字段是否有错误
【发布时间】:2019-09-24 01:54:50
【问题描述】:

我正在处理 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 中,如何确定“主题”属性是否有效,或者是否有错误?谢谢!

【问题讨论】:

  • 使用验证消息作为助手。大量的文档
  • “申请”是什么意思? (“有条件地应用类和结构”)
  • 我想做@if (Model.HasError("Subject") { ... } 这样的事情,这可能吗?如果有,怎么做?

标签: asp.net-mvc razor


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    正如在 cmets 和 @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>
    }
    

    这个 sn-p 应该在发布表单后显示您在Required 数据注释的ErrorMessage 属性中描述的错误消息。您会发现启用不显眼的验证很有用。

    你可以在ASP.NET MVC guides找到一篇关于验证的文章。

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

    【讨论】:

      【解决方案3】:

      在Controller中你可以使用ModelState.IsValid查看是否有错误,也可以使用ModelState["nameOfField"]查看特定字段是否有错误。

      在视图中,您可以使用Html.ValidationSummary()(显示所有错误,如果有)或Html.ValidationMessageFor()(显示特定控件的错误,如果有)。 StackOverflow 上和下的例子很多。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-04
        • 1970-01-01
        • 1970-01-01
        • 2018-04-08
        • 2011-03-11
        相关资源
        最近更新 更多