Pergunta

Eu tenho problemas como Texto do link

Todos os meus links se parecem com o seguinte: htp // site/controlador/ação/id

Acabei de adicionar área chamada Processo interno.

Meu controlador:

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

Agora, quando estou tentando obter um URL de Conroller usando

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

Tudo funciona bem, e URL é htp: // site/homeController/index/

Mas quando eu uso o método de extensão da Microsoft.Web.MVC.DLL

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

Eu recebo url htp: // site/Processo interno/HomeController/index/

Como posso obter o URL sem área usando o BuildUrlFromexpression e por que o ActionLink funciona bem, mas o BuildUrlFromexpression não?

Foi útil?

Solução

É Microsoft Bug.

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

O método usa internamente linkbuilder.buildurlfromexpression (). Este último chama o Routecollection.getVirtualPath (contexto, RouteValues) em vez de RouteCollection.getVirtualPathForAea (contexto, rotas); o que causa resultados inválidos ao usar áreas.

Eu fiz isso e o método retorne URL correto

Outras dicas

Eu tenho melhor resposta!

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")%>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top