2015-02-09 118 views
0

我想在ASP.NET MVC应用程序的默认视图文件夹中创建子文件夹。我使用MVC 4.0MVC中没有区域的控制器的子文件夹

查看/设备/自动/ Index.aspx的

查看/设备/自动/ Edit.aspx

查看/设备/半自动/ Index.aspx的

意见/Device/SemiAuto/Edit.aspx

查看/设备/手动/ Index.aspx的

查看/设备/手动/ Edit.aspx

我有DeviceContoller和我的网址应该是

http://.../Device/Auto/Index

http://.../Device/Auto/Edit

等了半自动和手动装置。我不希望为此使用区域。我不知道如何指定我的动作方法和路线。 任何帮助将不胜感激。

+0

对此的任何解释 – TJP 2015-02-09 18:24:35

回答

0

在MVC中,URL转到的地方根本不是基于视图文件的组织。这是因为浏览器请求不会直接打开视图。您可能会将其视为“.aspx”文件,其中浏览器直接跟踪路径和文件名。但MVC并非如此。在MVC中,您可以配置一组指定URL模式的路由,并为每个模式指定它在控制器上映射的功能。从该函数内部指定将使用哪个视图文件。它也在这里,你构建并通过支持模型。 MVC(模型 - 视图 - 控制器)从这些运动部件获得它的名字。

这听起来像你会很好地找到一个很好的MVC介绍,并从基础开始。这样,您就可以了解系统如何相互作用,并据此计划如何构建应用程序。你想要做的一切都可以完成,但你必须了解运动部件是什么以及它们如何相互作用。

0

默认查看引擎不支持默认搜索位置中的子文件夹。您可以创建自己的视图引擎,以添加有关MVC如何根据控制器/操作或某个自定义属性确定如何返回正确视图的规则。如果你走这条路线,你可以搜索RazorViewEngine

但最简单的是告诉MVC哪里可以找到视图。假设您将“About.cshtml”移动到名为“子目录”的子目录中。你可以像这样渲染它:

public ActionResult About() 
{ 
    return View("~/Views/Home/SubDirectory/About.cshtml"); 
} 
+0

感谢您的回复。我已经使用第二种方法返回视图,但我不希望这样实现它。我只想为MVC使用标准方法,如'return View();'通过我的模型使其更容易维护。如果您可以建议我如何在我的DeviceController中为其注册新路线和操作方法,那么它对我来说是完美的。再次感谢。 – TJP 2015-02-10 15:54:46

+0

如何确定在控制器/操作中呈现“自动”,“半自动”和“手动”的视图?基于这个答案,我可能会指出如何创建自定义RazorViewEngine以支持您的布局。由于MVC需要一种方式来理解你与这些子目录的关系以及何时/如何/为什么要使用它们,所以不可能将默认的RazorViewEngine用于子目录。 – 2015-02-10 17:47:00

+0

我不介意创建自定义的RazorViewEngine,如果它的快速和容易。我希望避免复杂的情况来实现它。我想知道如果它可能指定视图名称作为操作方法参数。例如:Auto(string viewName =“Index”);然后我可以通过在我的Url中传递viewname来调用它,如“http://.../Device/Auto/Index”或“http://.../Device/Auto/Edit”。在方法内部,我可以通过检查视图名称并返回视图来初始化我的模型。 – TJP 2015-02-12 17:58:59

相关问题