【问题标题】:How do I set the URL for a new page/view when using ASP.NET MVC使用 ASP.NET MVC 时如何设置新页面/视图的 URL
【发布时间】:2015-06-08 14:26:18
【问题描述】:

我刚刚开始使用/围绕 MVC 进行思考,但对于每个视图的实际 URL 是在哪里定义的,我仍然有些困惑。到目前为止,我有 2 个控制器和 2 个视图。第一个控制器工作,并在 URL http://localhost:60480/Example 下创建正确的视图,但我什至不确定它实际定义要在示例页面上显示的视图的位置。我将如何定义第二个页面/视图的 URL,以便“示例”上的超链接可以使用第二个控制器加载第二个视图?

基本上,我想在 /Example 上创建一个超链接,将我带到 /Example2 或其他页面。任何对 MVC 的建议/帮助将不胜感激!

谢谢,我知道我的术语可能有点不对,所以不要害怕纠正我!

【问题讨论】:

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


    【解决方案1】:

    您将在App_Start 中拥有一个名为RouteConfig.cs 的文件。这定义了 url 和控制器/动作之间的关系。

    如果没有人改变它,它看起来像:

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    

    http://localhost/Example 将匹配默认路由,将控制器设置为 ExampleController。由于 URI 没有任何操作,它将被设置为默认操作“索引”。

    所以这将命中控制器 ExampleController.cs 上的方法 'Index'

    要访问您的第二个控制器,只需将控制器名称(减去“控制器”)放入 url:http://localhost/Example2 将调用 Index 方法。要获得不同的方法/操作:http://localhost/Example2/ActionMethodOnController2

    public class Example2Controller : Controller
    {
        public ActionResult ActionMethodOnController2()
        {
            ...
            return View();
    

    然后它将为您提供与操作/方法同名的视图。视图可以有不同的名称,但不推荐。

    在默认路由中,会返回基于Index.cshtml的视图

    我想创建一个超链接

    您可以使用HtmlHelpers为您建立链接,例如:

    @Html.ActionLink("Link Caption", ActionName, ControllerName)
    @Html.ActionLink("Link Caption", "ActionMethodOnController2", "Example2")
    

    【讨论】:

    • 如果我的视图有一个文件夹(Views->Examples->Example.cshtml、Example2.cshtml),这会影响控制器找到该视图吗?我试图去 /Example2,但它说“找不到视图'索引'或其主视图”,但我显然有一个返回空白视图的 Index 方法。
    • 您的问题提到了 2 个控制器,因此您的视图将是 Views/Example1/Index.cshtml 和 Views/Example2/Index.cshtml。对于您评论中的视图,在您的ExamplesController 中添加一个与视图同名的方法(减去.cshtml),并使用我为ActionMethodOnController2 提供的代码(即复制此代码+ 重命名)。你的网址是localhost/[controller]/[action] - 所以对于你评论中的两个视图,这需要是localhost/Examples/Index(索引是可选的,所以只适用于localhost/Examples)和localhost/Examples/Example2
    • 太棒了!非常感谢!如果您可以为每个视图制作一个新方法,那么制作多个控制器有什么意义?
    • 几个原因。控制器名称是 URL 的一部分,因此变得有语义(有意义)。例如 //local/Dogs/List 与 //local/Cats/List,而不是 //local/home/dogslist。或 //local/Dogs/View/3 而不是 //local/home/viewdogs?id=3。这也可以用于 SEO(搜索引擎优化)。当您开始编写单元测试时,它也会产生影响。但主要是关注点分离 - DogsController 只需要处理狗,对猫一无所知。
    • 好的,有道理。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    相关资源
    最近更新 更多