我是网络开发的新手,正在努力学习ASP.NET MVC 5.我正在数据库中寻找一条记录,如果没有找到记录,那么我想向用户显示一条错误消息.以下是我的try :

Controller

    [HttpGet]
    public ActionResult Search()
    {
        return View();
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Search(ForgotPasswordMV viewModel)
    {
        if (Temp.Check(viewModel.Email))
            return RedirectToAction("VerifyToken", new { query = viewModel.Email });
        else
        {
            ViewBag.ErrorMessage = "Email not found or matched";
            return View();
        }
    }

View:

<p>@ViewBag.ErrorMessage</p>

ViewModel

public class ForgotPasswordMV
{
    [Display(Name = "Enter your email"), Required]
    public string Email { get; set; }
}

但我在某个地方读到,我应该在视图模型中放置一个属性,并在该属性上设置错误消息.我现在很困惑,如何实现这一点,以及如何在视图中显示错误?推荐/最佳实践是哪一种?

推荐答案

但是我在某处读到,我应该在视图模型中放入一个属性 并在该属性上设置错误消息.我现在很困惑,怎么才能 要做到这一点,那么如何在视图中显示错误呢?哪一个呢? 建议/最佳做法是什么?

最佳做法是如下更改控制器的ModelState dictionary属性:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Search(ForgotPasswordMV viewModel)
{
    // ... 
    else
    {
        ModelState.AddModelError(nameof(ForgotPasswordMV.Email), "Email not found or matched");
        return View(viewModel);
    }
}

然后在您的视图中,将下面的行添加到您的邮箱字段旁边;

@Html.ValidationMessageFor(m => m.Email)

Asp.net相关问答推荐

try 在 .net 中使用 MS Graph 添加新的应用程序角色时出现 ODataError

将 Response.Headers.Add 替换为方法属性decorator

属性包含破折号的 ServiceStack 请求对象?

如何删除字符串的定义部分?

Dotnet core 2.0 身份验证多模式身份 cookie 和 jwt

在每页级别增加 ASP.Net 超时

'Access-Control-Allow-Origin' 标头包含多个值 '*, *',但只允许一个

Azure Service Fabric 是否与 Docker 做同样的事情?

如何在 ASP.NET Web 窗体中使用依赖注入

使用 Lucene.NET 索引 .PDF、.XLS、.DOC、.PPT

ASP.NET Core 中的授权. [Authorize] 属性总是 401 Unauthorized

Gridview ItemTemplate 中多个判断字段的最佳技术?

如何在 C# 中转换 TryCast?

使用 LINQ 进行递归控制搜索

HttpContext.Current 在 MVC 4 项目中未解决

如何忽略身份框架的魔力,只使用 OWIN 身份验证中间件来获取我寻求的声明?

.NET - c# - 需要跨分区查询,但在 DocumentDB 数据访问上禁用了问题

如何在 ASP.NET 中设置下拉列表项?

哪个事件先调用?母版页 Page_Load 或内容页 Page_Load

如何创建代表 colored颜色 的随机十六进制字符串?