我正在处理 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 中,如何确定“主题”属性是否有效,或者是否有错误?谢谢!
虽然 ValidationMessageFor 是显示验证错误的标准方法,但以下代码完全符合您的要求,并且在极少数情况下很有用:
@if (!ViewData.ModelState.IsValidField("Subject"))
{
//not valid condition
}
Run Code Online (Sandbox Code Playgroud)
正如评论和 @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:并且不要忘记在控制器中执行服务器端验证(例如)。
| 归档时间: |
|
| 查看次数: |
3335 次 |
| 最近记录: |