Как указать область по умолчанию на HTML.BUILDURLFROMEXPSSSSUSPTION CALL
-
25-09-2019 - |
Вопрос
У меня есть проблемы, как Ссылка текста
Все мои ссылки выглядят так: HTP // Сайт / Контроллер / Действие / ID
Я просто добавил область под названием Отдохнуть.
Мой контроллер:
[ActionLinkArea("")]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
}
Теперь, когда я пытаюсь получить URL-адрес короллера, используя
@Html.ActionLink<HomeController >(c => c.Index(), "Home")
Все работает нормально, а URL является HTP: // Сайт / Homecontroller / index /
Но когда я использую метод расширения от Microsoft.Web.mvc.dll
@Html.BuildUrlFromExpression<HomeController>(c => c.Index())
Я получаю URL HTP: // сайт /Отдохнуть/ Homecontroller / index /
Как я могу получить URL без области, используя BuildurLFromeXpression и почему ActionLink работает нормально, но BuildurLFromexpression не работает?
Решение
Это ошибка Microsoft.
http://aspnet.codeplex.com/workitem/7764.
Способ использует внутренне linkbuilder.buildurlfroomexpression (). Последнее вызывает RouteCollection .getVirtualPath (контекст, Routevalues) вместо RouteCollection.getVirtualPathforararea (контекст, Routevalues); который вызывает недействительные результаты при использовании областей.
Я сделал это и метод вернуть правильный URL
Другие советы
У меня лучше ответ!
public static string Image<T>(this HtmlHelper helper, Expression<Action<T>> action, int width, int height, string alt)
where T : Controller
{
var expression = action.Body as MethodCallExpression;
string actionMethodName = string.Empty;
if (expression != null)
{
actionMethodName = expression.Method.Name;
}
string url = new UrlHelper(helper.ViewContext.RequestContext, helper.RouteCollection).Action(actionMethodName, typeof(T).Name.Remove(typeof(T).Name.IndexOf("Controller"))).ToString();
//string url = LinkBuilder.BuildUrlFromExpression<T>(helper.ViewContext.RequestContext, helper.RouteCollection, action);
return string.Format("<img src=\"{0}\" width=\"{1}\" height=\"{2}\" alt=\"{3}\" />", url, width, height, alt);
}
<%=Html.Image<ClassController>(c => c.Index(), 120, 30, "Current time")%>