在我的 asp.net mvc3 网站中,我Url.Action
在视图中使用生成 url。
@Url.Action("Profile", "Users", new { @Id = Model.UserId, name = Model.NickName })
现在,在我的一个助手类中,我需要做同样的事情。但收到此错误消息,“当前上下文中不存在名称‘Url’。
我可以使用另一个函数来生成 url 吗?
在我的 asp.net mvc3 网站中,我Url.Action
在视图中使用生成 url。
@Url.Action("Profile", "Users", new { @Id = Model.UserId, name = Model.NickName })
现在,在我的一个助手类中,我需要做同样的事情。但收到此错误消息,“当前上下文中不存在名称‘Url’。
我可以使用另一个函数来生成 url 吗?
您的示例中的 @Url 是UrlHelper
类的一个实例。您可以创建它的实例并在任何类中使用,如下例所示,但您需要访问RequestContext
相应视图的(在我的示例中命名的上下文)。
var urlHelper = new UrlHelper(context);
string absUrl = urlHelper.Action("ActionName",
"ControllerName", null, Request.Url.Scheme);
您不能在 Razor 视图之外使用 Razor 帮助器,@Url
它是 Razor 帮助器,并且仅限于视图页面。不在 .net 类文件中。
在你的类文件中试试这个例子
var urlHelper = new UrlHelper(context);
string absUrl = Url.Action("Users", "Users", new { Id = UserId, name =.NickName }, Request.Url.Scheme);
或者从控制器中使用
return RedirectToAction("Profile", "Users", new { @Id = Model.UserId, name = Model.NickName })
您可以在任何地方使用此代码,并且不需要 UrlHelper 或上下文:
RouteValueDictionary rvd = new RouteValueDictionary
{
{"controller", "ControllerName"},
{"action", "ActionName"},
{"area", ""}
};
VirtualPathData virtualPathData
= RouteTable.Routes.GetVirtualPath(null, new RouteValueDictionary());
return virtualPathData.VirtualPath;
这仅在属性“HttpContext.Current”不为空时才有效,这对于在 Web 应用程序中运行的代码是正确的。如果您没有为 GetVirtualPath 提供第一个参数,系统将使用上述静态属性返回的上下文。
因此,您仍然可以使用此方法在不提供上下文的情况下获取 URL。
上下文始终是必需的,因为它具有服务器的信息,以及应用程序运行所在的虚拟目录(如果存在)。