Je voulais ajouter une méthode d'extension à la classe HtmlHelper
afin que les développeurs puissent récupérer génériquement et AreaActionLink<T>
sans avoir à ajouter le new { area = "MyArea" }
à chaque fois, sans avoir à spécifier un Controller
. Tout cela fonctionne très bien si je spécifie l'espace de noms ou mets l'espace de noms du contrôleur de zone dans le Web.config. Par exemple, si je change l'espace de noms du contrôleur de zone en My.Web.Controllers
plutôt qu'en My.Web.MyArea.Controllers
, il lance un 404 mais si j'utilise l'espace de noms, il se résout correctement.AreaActionLink Extension Méthode et bug d'espace de noms?
public static MvcHtmlString AreaActionLink<T>(this HtmlHelper helper, string linkText, string actionName, object routeValues, object htmlAttributes) where T : IController
{
RouteValueDictionary routes = new RouteValueDictionary(routeValues);
string area = typeof(T).GetArea();
if (!routes.ContainsKey("area"))
routes.Add("area", area);
return helper.ActionLink(linkText,
actionName,
typeof(T).Name.Replace("Controller", string.Empty),
routes,
htmlAttributes as Dictionary<string, object>);
}
Cela fonctionne si l'espace de noms est qualifié lors de l'appel AreaActionLink
namespace My.Web.Areas.MyArea.Controllers
{
[Area("MyArea")]
public class OtherPlaceController : Controller
{
//...
}
}
et appelé comme ceci:
<%=Html.AreaActionLink<OtherPlaceController>("Link Text", "MyAction")%>
mais si je tente d'aplatir la hiérarchie des espaces de noms, donc je n » Je dois ajouter un nouvel espace de nom pour toujours Area il jette un 404.
namespace My.Web.Controllers
{
[Area("MyArea")]
public class OtherPlaceController : Controller
{
//...
}
}
Il semble que la partie .Areas
de l'espace de noms est important, mais je ne peux pas comprendre pourquoi ...
Oui, mes zones sont dans des sous-dossiers de la racine mais j'essayais d'obtenir des espaces de noms plats afin que je n'ai pas besoin de qualifier complètement l'espace de noms lorsque j'appelais ma méthode d'extension ou que je devais ajouter web.config. Je suppose que c'est une chose une seule fois donc ce n'est pas * trop * mauvais. – hunter