我是一名新的使用MVC3框架的Web开发人员。我们正在构建一个网站,为不同的受众群体实现大量子文件夹。这种路由概念在我们的SEO结构中投入了一个扳手。
在路由部分下的global.asax文件中,我们有:
routes.MapRoute("test", "test/{testFirst}/{testSecond}",
new { controller = "test", action = "RouteTest", testSecond = UrlParameter.Optional });
在我的控制器中我们有:
public ActionResult RouteTest(string testFirst, string testSecond)
{
return View(testFirst, testSecond);
}
当我运行网站并尝试转到/ test / test / index时,它不会拉出视图。它一直在寻找不存在的test.cshtml,因为它不是文件夹而是文件夹。
关于如何使嵌套文件夹有效的任何想法?
修改 这是我们想要的结构的一个分支,也许它将有助于我正在努力实现的目标。
这有点难以展现,但它应该得到这个想法。我们有5个不同的受众群体来到该网站。我打破了1个观众以及观众的流动。
并非所有细分市场都会有产品,有些产品只是其他细分市场的第3级产品并且有产品可供查看
观众
这是我们希望网址采用的基本结构
domain.com/audience/segment/products/(productsname)
关于如何实现这一目标的建议
答案 0 :(得分:2)
您对View()
方法使用了错误的重载。这是您拨打View(testFirst, testSecond)
时使用的内容:
protected internal ViewResult View(
string viewName,
string masterName
)
通过为viewName
添加“test”,您告诉Controller呈现名为Test
的视图(test.cshtml)。你没有。
听起来我正在尝试将WebForms与MVC相关联。它不一样,你看到了路由的一个主要例子。 ASP.NET MVC不适用于NTFS结构(文件夹和文件)。它依赖于路由定义的路由。
如果您要渲染视图“RouteTest”,请执行以下操作:
public ActionResult RouteTest(string testFirst, string testSecond)
{
ViewBag.testFirst = testFirst;
ViewBag.testSecond = testSecond;
return View();
}
这将呈现“RouteTest”视图,在动态对象ViewBag
中,您可以访问两个属性:testFirst
和testSecond
。在您的视图中,您可以提取这些值。 (虽然我强烈推荐使用ViewModel的强类型视图)
<强>视图模型强>
public class TestData
{
public string testFirst { get ; set ; }
public string testSecond { get ; set ; }
}
<强>控制器强>
public ActionResult RouteTest(string testFirst, string testSecond)
{
TestData td = new TestData();
td.testFirst = testFirst;
td.testSecond = testSecond;
return View(td);
}
强类型视图
@model TestData
@Html.Label(Model.testFirst)
@Html.Label(Model.testSecond)