Получить текущий URL страницы без параметров запроса - помощник Razor Html?
Есть ли метод в Razor, который возвращает URL-адрес текущих страниц без параметров запроса.
Мне нужно вставить его в HTML-помощник, который я создал как строку.
@Url
, похоже, не работает, и если я делаю .ToString()
, я просто получаю пространство имен LOLLL
Использование бритвы:
<th width="100%" @Html.SortTableClickEvent(@Url.ToString(), "Name")>
Html helper:
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>
Ответы
Ответ 1
Для этого вы можете использовать метод Request.Url.GetLeftPart
. Если ваш URL-адрес говорит
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")>
Ответ 2
Без запроса:
Request.Url.GetLeftPart(UriPartial.Path)
С запросом
Request.Url.PathAndQuery
Ответ 3
Это то, что я использовал, который также работает, чтобы избавиться от НИЧЕГО права на действие.
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 (или любой URL-адрес), этот нижний метод должен работать для вас.