c# - MVC3 Visual Studio 2010 中的嵌套文件夹

标签 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 });

在我的 Controller 中我们有:

public ActionResult RouteTest(string testFirst, string testSecond)
{
    return View(testFirst, testSecond);
}

当我运行该网站并尝试转到/test/test/index 时,它不会拉出 View 。它一直在寻找不存在的 test.cshtml,因为它是一个文件夹而不是文件。

关于如何使嵌套文件夹工作有什么想法吗?

编辑: 这是我们想要的结构的一个分支,也许它会对我想要实现的目标有所帮助。

这有点难以展示,但应该可以传达这个想法。我们有 5 个不同的受众访问该网站。我分割了 1 位观众以及该观众的流量。

并非所有分割都会有产品,有些只是内容,其他分割则具有第三级并有可供查看的产品

观众

  • 分割
  • 分割
    • 产品
  • 分割
    • 产品
  • 分割

这是我们希望 URL 采用的基本结构

domain.com/audience/segment/products/(产品名称)

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

最佳答案

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

protected internal ViewResult View(
    string viewName,
    string masterName
)

MSDN Reference .

通过为 viewName 添加“test”,您可以告诉 Controller 渲染一个名为 Test (test.cshtml) 的 View 。你没有。

在我看来,您正试图将 WebForms 与 MVC 关联起来。它不一样,您正在看到一个关于路由的主要示例。 ASP.NET MVC 不能脱离 NTFS 结构(文件夹和文件)工作。它依赖于通过路由定义进行路由。

如果您希望渲染 View “RouteTest”,请执行以下操作:

public ActionResult RouteTest(string testFirst, string testSecond)
{
    ViewBag.testFirst = testFirst;
    ViewBag.testSecond = testSecond;

    return View();
}

这将呈现“RouteTest” View ,并且在动态对象 ViewBag 中,您将可以访问两个属性:testFirsttestSecond。在您看来,您可以提取这些值。 (尽管我强烈推荐使用 ViewModel 的强类型 View )

示例解决方案

View 模型

public class TestData
{
    public string testFirst { get ; set ; }
    public string testSecond { get ; set ; }
}

Controller

public ActionResult RouteTest(string testFirst, string testSecond)
{
    TestData td = new TestData();
    td.testFirst = testFirst;
    td.testSecond = testSecond;

    return View(td);
}

强类型 View

@model TestData

@Html.Label(Model.testFirst)
@Html.Label(Model.testSecond)

关于c# - MVC3 Visual Studio 2010 中的嵌套文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9200863/

相关文章:

c# - 如何发布 Windows 窗体应用程序?

c# - 确保 Weakreference 在 IsAlive 之后仍然存在

c# - MVC 中 ASPXAUTH Cookie 的安全标志

c# - 仅针对特定请求的 MVC 跟踪

c# - 如何处理在 c# mvc.net 应用程序 Controller 中使用 PhoneGap 上传的音频文件?

jquery - 在 MVC 3 中,如何要求在表单提交到服务器之前在客户端检查复选框?

c# - 在 C# 中,为什么我在声明它时看到我的 int 变量中存储了一个零,但仍然收到一条错误消息说我应该初始化它?

c# - mailItem.PropertyChange 停止触发

sql-server - 对于 ASP.NET MVC Web 应用程序,将文本文件存储到 Sql Server 数据库中的最佳方法是什么?

asp.net-mvc - asp.net mvc3 razor 语法通过反射将模型转换为其子类