So geben Sie den Standardbereich für den Anruf html.buildurlfromexpression an
-
25-09-2019 - |
Frage
Ich habe ein Problem wie Link Text
Alle meine Links sehen so aus: HTP // Site/Controller/Action/ID
Ich habe gerade den Bereich genannt Backend.
Mein Controller:
[ActionLinkArea("")]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
}
Jetzt, wenn ich versuche, eine Conroller -URL zu bekommen
@Html.ActionLink<HomeController >(c => c.Index(), "Home")
Alle funktionieren gut und URL ist htp: // seiten/homecontroller/index/
Aber wenn ich die Erweiterungsmethode von microsoft.web.mvc.dll verwende
@Html.BuildUrlFromExpression<HomeController>(c => c.Index())
Ich bekomme URL htp: // seiten/Backend/Homecontroller/index/
Wie kann ich URL ohne Gebiet mit buildurlfromexpression erhalten und warum ActionLink gut funktioniert, aber Buildurlfromexpression nicht?
Lösung
Es ist Microsoft Bug.
http://aspnet.codeplex.com/workitem/7764
Die Methode verwendet intern linkbuilder.buildurlfromexpression (). Letzteres ruft RouteCollection.getVirtualPath (Kontext, Routrevalues) anstelle von RouteCollection.getVirtualPathForarea (Kontext, Routrevalues); Dies verursacht ungültige Ergebnisse bei der Verwendung von Bereichen.
Ich habe es getan und Methode Return Right URL zurücksend
Andere Tipps
Ich habe bessere Antwort!
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")%>