【问题标题】:adding custom view name in asp.net mvc4在 asp.net mvc4 中添加自定义视图名称
【发布时间】:2014-01-17 12:17:31
【问题描述】:

我正在.net mvc4 中构建一个基于业务推广和销售商店的应用程序。

此网络应用程序上的用户也可以使用产品并访问他/她的个人业务页面,该页面可以在未来推广。

所以我添加了一个控制器 - Mypanel 和用户个人或专业业务页面的视图 _Mypanel

现在访问这个页面的url是Bizcopter.com/Mypanel/_Mypanel

我想要一个自定义的用户定义页面名称-

即如果企业名称是 - BookStore 然后我想在同一个控制器中添加一个名称为BookStore 的视图,因此个人业务页面的 URL 将是-

Bizcopter.com/Mypanel/BookStore/ 并且该企业所有者可以使用此 URL 宣传他的企业页面。

让我知道这些是否可行-

  1. 替换用户选择的视图名称
  2. 在同一控制器中从客户端添加视图

我不知道如何实现它,所以没有任何尝试代码。

网站网址-http://bizcopter.com/Mypanel/_Mypanel

【问题讨论】:

  • 您需要定义一个自定义路由来处理这个 URL 模板,它将“BookStore”作为参数传递给控制器​​函数,然后控制器函数会将用户重定向到相关页面。
  • 这个 SO 问题可能会给你一些提示:stackoverflow.com/questions/9706183/…

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


【解决方案1】:

您不需要为每个业务单独的视图和控制器操作。

我将创建一个名为MyPanel 的控制器和视图。控制器接受一个名为businessName 之类的参数,该参数将加载与该参数相关的数据。

【讨论】:

  • 这仍然是这个 URL - bizcopter.com/Mypanel/Mypanel/ 不完全是视图的名称和公司名称。没有人会对推广我定义的 URL 表现出兴趣。顺便说一句,我在加载数据时没有任何问题 :)
  • @Manoz 您可以按照自己的方式自定义路线。看看这个 -> asp.net/mvc/tutorials/controllers-and-routing/…
  • @Manoz,不,不会。 URL 将是 bizcopter.com/Mypanel/[buinsessName]。尽管使用路由,您不受任何格式的限制 - 它非常灵活。
  • 是的,伙计!我也可以在没有任何控制器和操作名称的情况下访问页面。很棒
【解决方案2】:

默认情况下,您的 AppStart/RouteConfig.cs 中有一条路由,可能如下所示:

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

默认 URL 结构可能类似于:http://localhost:{PortNumber}/{Controller}/{Action}

我们可以在哪里归因于:

Controller = Home

Action = Index

现在,如果您想要与您拥有的类似的东西,您会想要类似以下的东西:

http://testing.com/Fruits/Apples

Controller = Fruits

Action = Apples

默认情况下,URL 模式将匹配具有正确段数的任何 URL,在本例中为 {controller}/{action}

总体而言,您应该只需要 MyPanel 控制器和一个带有字符串参数的控制器,它将正确的对象/模型加载到视图中。

来源:Pro ASP.NET MVC 4 - Adam Freeman

【讨论】:

    【解决方案3】:

    正如其他人所说,您可以添加一条新路线。考虑以下代码:

    routes.MapRoute(
                name: "MyCustomRoute",
                url: "MyPanel/{name}"
                defaults: new  { controller = "MyPanel", action = "MyAction", name="" }
            );
    

    如果用户输入此 URL,则在此路由中:

    Bizcopter.com/Mypanel/
    

    然后默认转到MyPanel Controller中的MyAction。实际上它将始终转到MyAction,并且在您的MyAction中,您必须带name参数并重定向到用户到相关操作像这样:

    public ActionResult MyAction() 
    {
        var name = RouteDate.Values["name"];
    
        // check the name and redirect user to another action if it necessary
    
        if(name == "BookStore") return RedirectToAction("BookStore","Mypanel");
    }
    

    【讨论】:

      猜你喜欢
      • 2021-05-29
      • 2014-01-26
      • 2013-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多