Asp.net mvc ASP.NET MVC查看消息

Asp.net mvc ASP.NET MVC查看消息,asp.net-mvc,Asp.net Mvc,我正在使用FluentValidation来验证我的模型,而且效果非常好 但我有一个问题是,如何处理未附加到属性的消息 示例:客户登录视图。当登录无效时,我想显示一条简单的消息 我所做的是向模型中添加一个属性,Message,然后在视图中为该属性创建一条验证消息 这是可行的,但我们希望看到其他人在做什么 更新 为简单起见,考虑以下内容: 查看模型 'Uses a FluentValidation Validator Public Class LogonViewModel Public P

我正在使用FluentValidation来验证我的模型,而且效果非常好

但我有一个问题是,如何处理未附加到属性的消息

示例:客户登录视图。当登录无效时,我想显示一条简单的消息

我所做的是向模型中添加一个属性,
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!")