Domanda

Ho problemi come Testo di collegamento

Tutti i miei collegamenti sono così: htp // sito/controller/azione/id

Ho appena aggiunto l'area chiamata Backend.

Il mio controller:

[ActionLinkArea("")]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}

Ora quando provo a ottenere un po 'di URL conroller usando

@Html.ActionLink<HomeController >(c => c.Index(), "Home") 

Tutto funziona bene e l'URL è htp: // sito/homecontroller/indice/

Ma quando utilizzo il metodo di estensione da Microsoft.Web.mvc.dll

 @Html.BuildUrlFromExpression<HomeController>(c => c.Index())

Ottengo url htp: // sito/Backend/HomeController/Index/

Come posso ottenere URL senza area utilizzando buildurlfromexpression e perché ActionLink funziona bene ma buildurlfromexpression no?

È stato utile?

Soluzione

È Microsoft Bug.

http://aspnet.codeplex.com/workitem/7764

Il metodo utilizza internamente LinkBuilder.buildurlfromexpression (). Quest'ultimo chiama RouteCollection.getvirtualpath (contesto, routevalues) anziché RouteCollection.getvirtualpathforarea (contesto, routevalues); che provoca risultati non validi quando si utilizzano aree.

L'ho fatto e il metodo restituisce l'URL corretto

Altri suggerimenti

Ho una risposta migliore!

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")%>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top