首页 > 解决方案 > 如果未找到数据,则返回同一视图并在同一视图中显示未找到消息

问题描述

我有搜索视图,用户在其中输入员工 ID,单击按钮后执行操作方法,用户被重定向到员工详细信息视图。

如果员工 ID 不匹配,我想保留相同的搜索视图并在 MVC 中显示一个带有未找到员工详细信息的标签,

请帮助在我的控制器中执行上述功能。

    [HttpGet]
    public async Task<ActionResult> Details(string firstName)
    {
        var empDetails = await _context.EmpDetails
            .FirstOrDefaultAsync(m => m.FirstName == firstName);

        if (empDetails == null)
        {
            // ???
        }

        return View(empDetails);
    } 

标签: asp.net-mvc

解决方案


拥有 ViewModel 类是一种很好的做法。制作一个,并使用它将域对象和消息传输到您的视图。像这样:

class EmpDetailsViewModel
{
    public EmpDetail Emp { get;set; }
    public string Message { get;set; }
}

[HttpGet]
public async Task<ActionResult> Details(string firstName)
{
    var vm = new EmpDetailsViewModel();

    var empDetails = await _context.EmpDetails
        .FirstOrDefaultAsync(m => m.FirstName == firstName);

    if (empDetails == null)
    {
        vm.Message = "Employee not found (or whatever)"
    }
    else
    {
        vm.Emp = empDetails;
    }

    return View(vm);
} 

然后,在你看来,就做

if (Model.Emp == null) 
{ 
<span>@Model.Message</span> 
} 
else 
{
<div>Emp details stuff </div>
}

推荐阅读