如何从URL中删除控制器和操作,只获取MVC中的url

时间:2010-02-01 06:14:29

标签: c# model-view-controller

修改 我可能没有很好地解决我的问题。实际问题不在路由中,而是在尝试派生请求的实际URL时。

该应用程序可以部署在许多单独的计算机上。例如

  

http://localhost:2990/Client/List

     

http://avapd024/llne.dev/Client/List

     

http://machine123:81/llne.prod/Client/List

等等

我无法使用Action.Link或html帮助程序的原因是我需要在将其返回到视图之前构建链接,因为它填充为网格采用JSON(datatables.net)和NOT以及视图的时间正在呈现

感谢

我需要用一个项目列表填充一个网格,作为指向不同控制器和动作和id的链接。

例如

; 当我加载网格时,网址如下:http://localhost:2990/Client这很好。网格包含如下链接

JSID = "<a href='http://" + RequestUrl + "/trainingdelivery/Get/" + referral.ReferralId + "'>Training Delivery</a>",

控制器是'trainingdelivery',操作是'Get',id = referralid,这会产生类似http://localhost:2990/trainingdelivery/Get/12345的网址。这在我的本地计算机上很好但是当我们部署它时会转到一个服务器,其中包含不同的网址,如http://avapd024/llne.dev:81/,因为你可以看到'llne.dev:81'是IIS网页,我需要获取网址无论在何处识别其位置并转向正确的控制器和动作。

我尝试使用请求对象,我可能会在那里乱砍,但我想知道是否有更好的解决方案?

感谢

public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.IgnoreRoute("{resource}.js/{*pathInfo}");

            routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });

            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = "" } // Parameter defaults
                );
        }

AJCOM CALL IN JQUERY

oTable = $('#referralTable').dataTable(
        {

            "bFilter": true,
            "bJQueryUI": true,
            "sPaginationType": "full_numbers",
            "bAutoWidth": false,
            "sAjaxSource": "../Client/Fetch",
            "aoColumns": [
            //client details
                            {"bVisible": false, "sName": "ReferralId" },
                            { "sTitle": "CRN", "sName": "CRN" },
                            { "sTitle": "JSID", "sName": "JSID" },
                            { "sTitle": "Name", "sName": "Name" }
]
});

sAjaxSource是使用数据加载网格并返回JSON的调用。返回时,需要正确格式化。

4 个答案:

答案 0 :(得分:2)

是的!使用HtmlHelper.ActionLink()方法。

JSID = <%= Html.ActionLink("Get", 
            new { controller = "trainingdelivery", id = referral.ReferralId}) %>

这假设您已在Global.asax文件中设置了如下路线:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace MyApp.MVC
{
  public class MvcApplication : System.Web.HttpApplication
  {
    public static void RegisterRoutes(RouteCollection routes)
    {
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

      routes.MapRoute(
        "TrainingDelivery",
        "trainingdelivery/{action}/{id}",
        new { controller = "TrainingDelivery", action = "Get", id = 0 }
      );
    }

    protected void Application_Start(object sender, EventArgs e)
    {
      RegisterRoutes(RouteTable.Routes);
    }
  }
}

详细了解ASP.Net Routing

答案 1 :(得分:0)

我认为您应该使用此link.

中定义的域路由

答案 2 :(得分:0)

解决方案是使用Request.ApplicationPath构建url。

答案 3 :(得分:0)

如果您有MVC5

,请在您的RoutConfig中添加routes.MapMvcAttributeRoutes();

步骤1:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapMvcAttributeRoutes();

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

步骤:2在您的行动上方写下路线

[Route("{Id}")]
public ActionResult NewsGroupList(string Id)
{
    return View();
}

您的网址:websitename.com/Id