Asp.net mvc ASP.NET MVC查看消息
我正在使用FluentValidation来验证我的模型,而且效果非常好 但我有一个问题是,如何处理未附加到属性的消息 示例:客户登录视图。当登录无效时,我想显示一条简单的消息 我所做的是向模型中添加一个属性,Asp.net mvc ASP.NET MVC查看消息,asp.net-mvc,Asp.net Mvc,我正在使用FluentValidation来验证我的模型,而且效果非常好 但我有一个问题是,如何处理未附加到属性的消息 示例:客户登录视图。当登录无效时,我想显示一条简单的消息 我所做的是向模型中添加一个属性,Message,然后在视图中为该属性创建一条验证消息 这是可行的,但我们希望看到其他人在做什么 更新 为简单起见,考虑以下内容: 查看模型 'Uses a FluentValidation Validator Public Class LogonViewModel Public P
Message
,然后在视图中为该属性创建一条验证消息
这是可行的,但我们希望看到其他人在做什么
更新
为简单起见,考虑以下内容:
查看模型
'Uses a FluentValidation Validator
Public Class LogonViewModel
Public Property UserName AS String<br>
Public Property Password AS String
End Class
”使用FluentValidation验证器
公共类LogonViewModel
公共属性用户名作为字符串
作为字符串的公共属性密码
末级
查看
<div id="GenericMessage">--Generic Messages Go Here--</div>
@<table border="0" cellpadding="2" cellspacing="0">
<tr>
<td>User Name:</td>
<td>@Html.EditorFor(Function(x) x.UserName) @Html.ValidationMessageFor(Function(x) x.UserName)</td>
</tr>
<tr>
<td>Password:</td>
<td>@Html.EditorFor(Function(x) x.Password) @Html.ValidationMessageFor(Function(x) x.Password)</td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Logon" /></td>
</tr>
</table>
——通用消息在此处显示--
@
用户名:
@EditorFor(函数(x)x.UserName)@Html.ValidationMessageFor(函数(x)x.UserName)
密码:
@Html.EditorFor(函数(x)x.Password)@Html.ValidationMessageFor(函数(x)x.Password)
我想做的是有一个通用消息
div
,我可以在其中显示消息,比如“无效登录”。我的问题是我应该把它放在模型中的什么地方?我是否创建一个属性,然后在控制器ModelState
中设置它?或者我应该使用ViewData
?您不使用ModelState处理错误的任何原因
例如,如果视图模型具有datetime属性,并且用户输入了类似“blah”的内容,则当您再次渲染视图时,ModelState将自动返回该错误
可以在验证摘要中检索该错误
<%: Html.ValidationSummary() %>
如果您正在寻找一种从控制器到视图的通信方式(错误除外),那么我认为可以向viewModel添加一个属性,在控制器中为其指定一个值,然后在视图中访问它
如果ModelState不能满足您的需要,那么我认为对错误执行此操作没有任何错误。您不使用ModelState处理错误的原因是什么 例如,如果视图模型具有datetime属性,并且用户输入了类似“blah”的内容,则当您再次渲染视图时,ModelState将自动返回该错误 可以在验证摘要中检索该错误
<%: Html.ValidationSummary() %>
如果您正在寻找一种从控制器到视图的通信方式(错误除外),那么我认为可以向viewModel添加一个属性,在控制器中为其指定一个值,然后在视图中访问它
如果ModelState不能满足您的需要,那么我认为对错误执行此操作没有任何错误。但我有一个问题,那就是如何处理未附加到属性的消息
据我从这个问题中了解,您没有给框架任何提示来验证输入。正确的?如果是这样,就这样做
在视图中放置以下代码
@Html.ValidationSummary()
并在post-action方法中验证您的输入。如果无效,请将错误消息添加到视图状态。这是一个例子
if (captchaValid == false) {
ModelState.AddModelError("recaptcha", "Invalid characters on securty code! Please try it again");
return View(model);
}
但我有一个问题是,如何处理未附加到属性的消息
据我从这个问题中了解,您没有给框架任何提示来验证输入。正确的?如果是这样,就这样做
在视图中放置以下代码
@Html.ValidationSummary()
并在post-action方法中验证您的输入。如果无效,请将错误消息添加到视图状态。这是一个例子
if (captchaValid == false) {
ModelState.AddModelError("recaptcha", "Invalid characters on securty code! Please try it again");
return View(model);
}
虽然我认为我更喜欢Modelstate,但我通常会在我的_Layout.cshtml中定义如下内容:
@if(TempData["Error"]!=null)
{
<div class="error">@TempData["Error"]</div>
}
@if(TempData["Warning"]!=null)
{
<div class="warning">@TempData["Warning"]</div>
}
@if(TempData[“Error”]!=null)
{
@TempData[“错误”]
}
@if(TempData[“Warning”]!=null)
{
@TempData[“警告”]
}
然后,我只需在控制器中分配TempData[“Error”]或TempData[“Warning”]。虽然我认为我更喜欢Modelstate,但我通常会在我的_Layout.cshtml中定义这样的内容:
// for a specific property
ModelState.AddModelError("Birthdate", "You can't use this date!")
// to show in summary
ModelState.AddModelError("", "Dates are too close!")
@if(TempData["Error"]!=null)
{
<div class="error">@TempData["Error"]</div>
}
@if(TempData["Warning"]!=null)
{
<div class="warning">@TempData["Warning"]</div>
}
@if(TempData[“Error”]!=null)
{
@TempData[“错误”]
}
@if(TempData[“Warning”]!=null)
{
@TempData[“警告”]
}
然后,我只需在控制器中分配TempData[“Error”]或TempData[“Warning”]。我使用的是模型状态,我相信FluentValidation会为您这样做。请参阅我的编辑。您是否尝试将验证摘要添加到视图中,然后使用ModelState.AddModelError(“错误消息”)添加错误?验证摘要中的一个布尔参数等于true(我相信),它将拾取与特定属性无关的所有ModelState错误。我使用的是model state,实际上FluentValidation为您完成了这项工作。请参阅我的编辑。您是否尝试将验证摘要添加到视图中,然后使用ModelState.AddModelError(“错误消息”)添加错误?验证摘要中有一个布尔参数等于true(我相信),它将拾取与特定属性无关的所有ModelState错误。
// for a specific property
ModelState.AddModelError("Birthdate", "You can't use this date!")
// to show in summary
ModelState.AddModelError("", "Dates are too close!")