修改 我可能没有很好地解决我的问题。实际问题不在路由中,而是在尝试派生请求的实际URL时。
该应用程序可以部署在许多单独的计算机上。例如
http://localhost:2990/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的调用。返回时,需要正确格式化。
答案 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)
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