Razor中是否有一个方法返回当前页面的URL而没有查询参数。
我需要把它推到我作为字符串创建的HTML帮助器方法中。
@Url
似乎不起作用,如果我.ToString()
我只是得到命名空间LOLLL
使用Razor:
<th width="100%" @Html.SortTableClickEvent(@Url.ToString(), "Name")>
Html帮助:
public static MvcHtmlString SortTableClickEvent(this HtmlHelper html, string url, string column)
{
StringBuilder sortingPropertiesObject = new StringBuilder();
sortingPropertiesObject.Append("var properties = new James.prototype.Table.SortingProperties();");
sortingPropertiesObject.Append("properties.url = \"" + url + "\"");
sortingPropertiesObject.Append("properties.colName = \"" + column + "\"");
string clickEvent = "onclick = James.Table.SortByColumn(properties, this);";
return MvcHtmlString.Create(sortingPropertiesObject + clickEvent);
}
什么输出到我的html:
<th width="100%" onclick='James.Table.SortByColumn("Name",' this);="" properties.colname="Name" james.prototype.table.sortingproperties();properties.url="System.Web.Mvc.UrlHelper" properties="new" var="">
Name
</th>
答案 0 :(得分:24)
您可以使用Request.Url.GetLeftPart
方法。如果你的网址是
http://the-site.com/controller/action?param=1
执行Request.Url.GetLeftPart(UriPartial.Path)
应该给出
http://the-site.com/controller/action
在可能如下所示的代码中:
<th width="100%" @Html.SortTableClickEvent(@Request.Url.GetLeftPart(UriPartial.Path), "Name")>
答案 1 :(得分:8)
没有查询字符串:
Request.Url.GetLeftPart(UriPartial.Path)
使用查询字符串
Request.Url.PathAndQuery
答案 2 :(得分:2)
这就是我所使用的,它也可以解决任何行动的权利。
public static string GetParameterlessPath(ActionExecutingContext filterContext)
{
return GetParameterlessPath(filterContext.ActionDescriptor.ActionName,
VirtualPathUtility.ToAppRelative(filterContext.HttpContext.Request.Path));
}
public static string GetParameterlessPath(string action, string relativeUrl)
{
return relativeUrl.Contains(action)
? relativeUrl.Substring(0, relativeUrl.LastIndexOf(action))+action
: relativeUrl;
}
这显然是一个静态方法,但我把它放在我的ActionFilter中,因此我得到了ActionExecutingContext。如果你有动作和relativeUrl(或任何网址)底层方法应该适合你。