我显然没有理解路由的概念--在一个实验中,我将路由设置为
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("Standard",
"{devicetype}/{devicesub}/{language}/{culture}/{controller}/{action}/{id}",
new
{
devicetype = "pc",
devicesub = "def",
language = "en",
culture = "int",
controller = "Home",
action = "Index",
id = ""
}
);我的索引页在Views/pc/def/en/int/Home中
当我运行它时,搜索/Home/Index.aspx时出现错误
它似乎仍然使用默认结构,而不是我更复杂的结构-我不理解的是什么?
发布于 2009-11-25 02:06:24
因此,如果您的控制器仅以return View()或return View(modelData)结尾,则相关行为:
controller = "Home",
action = "Index",所有与上面的路由匹配的URL都将到达那里,除非您的URL是针对/pc/def/en/int/Widgets之类的内容,在这种情况下,您将路由到WidgetsController/index。
听起来你想对同一个动作有不同的看法。如果你想根据传递给控制器的参数有不同的视图,你可以这样做。当你返回你的ViewResult时,你需要明确地说明这一点。您可以使用return View("SpecialView",model),视图引擎将在控制器的视图目录中查找SpecialView.aspx。当然,可以将"SpecialView“替换为适合您的应用程序的字符串,如果有意义,也可以通过编程方式生成。
发布于 2009-11-25 01:44:19
存储站点内容的方式并不反映路由,而是由控制器和视图定义的,所以尽管您的路由很复杂,但您仍然会在主控制器上结束,所以MVC将在/ Views /home中查找适当的视图,在本例中是索引。
我发现最难理解的事情之一是把URL从处理和更重要的内容中分离出来--这是正确的,也是聪明的,但路由和结果可以完全不同的事实(在目录结构中查找内容)是,呃,有趣的(-:
作为一个实际的实验,除了将您的索引页重新定位到/views/home/index.aspx之外,什么也不做,看看这是否解决了问题……
发布于 2009-11-25 01:45:10
我自己也是一个新手,所以这可能是不正确的,但据我所知,视图的路径总是位于"Controller/Action“路径中。您指定的其他属性只是与请求一起提交的查询字符串值。
希望这能帮上忙。
G
https://stackoverflow.com/questions/1791677
复制相似问题