【问题标题】:Weird behavior of urlrewriting in MVC3 with razor viewengine带有剃刀视图引擎的 MVC3 中 urlrewriting 的奇怪行为
【发布时间】:2011-02-15 04:56:25
【问题描述】:

我正在开发一个采用 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"}
);

当我在浏览器中输入 url http://domain.com/Home/Result/abc123 时,它应该显示一个名为“Result”的视图。然而它没有。 相反,它在下面给了我一个例外:

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

很奇怪不是吗? 谁能帮我弄清楚我犯了什么错误?

【问题讨论】:

  • 删除该路线。有什么意义?在这种情况下,默认路由就足够了。

标签: asp.net-mvc-3


【解决方案1】:
return View(id);   

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

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

return View();

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

ViewBag.ID = id;
return View();

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

@ViewBag.ID

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多