用razor viewengine在MVC3中urlrewriting的奇怪行为

时间:2011-02-15 04:56:25

标签: asp.net-mvc-3

我正在开发一个采用ASP.NET MVC3(Razor)技术的项目。 现在,我有一个控制器:

public class Home: Controller
{
    public ActionResult Result(string id)
    {
        return View(id);
    }
}

我已将MapRoute设置如下:

context.MapRoute(
    "Home_result",
    "Home/Result/{id}",
    new { controller="Home", action = "Result"}
);

当我在浏览器中输入网址http://domain.com/Home/Result/abc123时,显示一个名为“结果”的视图。但事实并非如此。 相反,它在下面给了我一个例外:

The view 'Result' or its master was not found or no view engine supports the searched locations. The following locations were searched:
~/Views/Home/abc123.cshtml
~/Views/Home/abc123.vbhtml
~/Views/Shared/abc123.cshtml
~/Views/Shared/abc123.vbhtml

不奇怪不是吗? 任何人都可以帮我弄清楚我犯了什么错误吗?

1 个答案:

答案 0 :(得分:3)

return View(id);   

返回名称为ID的值(.cshtml)的视图,而不是名为result.cshtml的视图。 我认为这是因为Id是一个字符串。您是否尝试将ID传递给视图?

要返回与控制器操作名称匹配的视图,只需使用

return View();

如果你想将该值传递给视图,那么出于任何疯狂的原因,使用viewbag是最简单的方法,因为字符串id用于声明视图名称。

ViewBag.ID = id;
return View();

然后在视图中使用您存储的值。是的Razor HTML默认编码。

@ViewBag.ID