与操作控制器同名的RouteValue字符串出错

时间:2011-10-09 20:35:27

标签: c# asp.net-mvc-3

我最初在视图中有以下代码:

return RedirectToAction("Error", new { error = "User Already Exists" });

这导致View not found错误:

enter image description here

将代码更改为以下代码可以正常工作:

return RedirectToAction("Error", new { errorid = "User Already Exists" });

考虑到两者都只是字符串名称,我确信在两种情况下我都调用相同的重载,但是,我只是无法理解这里有什么问题/为什么它认为我需要一个不同的视图。

我做错了什么?


@SLaks'请求 -

    public ActionResult Error(string errorid)
    {
        ViewBag.error = errorid;

        return View();
    }

(之前,errorid只是错误)

2 个答案:

答案 0 :(得分:2)

最有可能发生的是您的Error方法构建如

public ActionResult Error(string errorid) {
    ViewBag.error = errorid;

    return View(errorid);
}

而不是您使用ViewBag。这将导致发生的确切错误。您可能将模型设为@model string。这会失败并导致该错误的原因是因为View(string)的签名假定您传递了您想要查看的视图(而不是模型)。在这种情况下要修复它,你需要做return View("Error", errorid);之类的事情,其中​​第二个参数是你的模型。

答案 1 :(得分:1)

ASP.Net MVC将路由与使用参数名称的操作匹配。

因此,路径/ URL中的参数名称必须与操作的参数完全匹配。