MVC3 Visual Studio 2010中的嵌套文件夹

时间:2012-02-08 20:26:28

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

我是一名新的使用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)

关于如何实现这一目标的建议

1 个答案:

答案 0 :(得分:2)

您对View()方法使用了错误的重载。这是您拨打View(testFirst, testSecond)时使用的内容:

protected internal ViewResult View(
    string viewName,
    string masterName
)

MSDN Reference

通过为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中,您可以访问两个属性:testFirsttestSecond。在您的视图中,您可以提取这些值。 (虽然我强烈推荐使用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)