ASP.NET MVC - 构建URL或链接的HTML扩展方法

p.c*_*ell 4 asp.net-mvc asp.net-mvc-routing

考虑一种扩展方法,其目的是:

  • 渲染一个<a>标签
  • 在某些情况下,只返回一个没有链接的字符串

  问题:在扩展方法中,如何利用路由值等适当的路由逻辑,而不是对字符串进行硬编码.我怀疑HtmlHelper.GenerateRouteLink是解决方案的一部分,但请建议实现这一目标的最佳方法.

public static string CreateUserLink(this HtmlHelper html, string userAcctName)
{
    if (string.IsNullOrEmpty(userAcctName))
        return "--Blank--";

    //some lookup to A.D.            
    DomainUser user = ADLookup.GetUserByAcctName(userAcctName);

    if (user == null)
        return userAcctName;

    //would like to do this correctly!
    return string.Format("<a href='/MyAppName/User/View/{0}' title='{2}'>{1}</a>"
                        , user.Mnemonic, user.DisplayName, user.Location);

    //normally returns http://mysite.net/MyAppName/User/View/FOO
    }
Run Code Online (Sandbox Code Playgroud)

更多信息:

  • 使用ASP.NET MVC 1.0

替代文字

Nei*_* T. 7

我昨天不得不做类似的事情.可能有一种更为流畅的方式,但它可以帮助我准确地看到发生了什么,所以我不承担任何责任.

public static string CreateUserLink(this HtmlHelper html, string userAcctName)
{
    if (string.IsNullOrEmpty(userAcctName))
        return "--Blank--";

    //some lookup to A.D.            
    DomainUser user = ADLookup.GetUserByAcctName(userAcctName);

    if (user == null)
        return userAcctName;

    RouteValueDictionary routeValues = new RouteValueDictionary();

    routeValues.Add("controller", "User");
    routeValues.Add("action", "View");
    routeValues.Add("id", user.Mnemonic);

    UrlHelper urlHelper = new UrlHelper(html.ViewContext.RequestContext);
    TagBuilder linkTag = new TagBuilder("a");

    linkTag.MergeAttribute("href", urlHelper.RouteUrl(routeValues));
    linkTag.MergeAttribute("title", user.Location);
    linkTag.InnerHtml = user.DisplayName;

    return linkTag.ToString(TagRenderMode.Normal);
}
Run Code Online (Sandbox Code Playgroud)