我正在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。