Получить URL текущей страницы без параметров запроса - Razor Html helper?

есть ли метод в Razor, который возвращает текущий URL-адрес страниц без параметров запроса.

мне нужно засунуть его в вспомогательный метод HTML, который я создал в виде строки.

@Url не работает и если я делаю .ToString() Я просто получаю пространство имен LOLLL

использовать бритву:

<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>

3 ответов


можно использовать 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")>

без строки запроса:

Request.Url.GetLeftPart(UriPartial.Path)

С querystring

Request.Url.PathAndQuery

Это то, что я использовал, что также работает, чтобы избавиться от чего-либо права действия.

 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-адрес), Этот метод bottom должен работать для вас.