代码之家  ›  专栏  ›  技术社区  ›  stpe

如何从自定义帮助程序使用ASP.NET MVC Html帮助程序?

  •  11
  • stpe  · 技术社区  · 15 年前

    using System;
    namespace MvcApp.Helpers
    {
        public class SearchResultHelper
        {
            public static string Show(Result result)
            {
                string str = "";
    
                // producing HTML for search result here
    
                // instead of writing
                str += String.Format("<a href=\"/showresult/{0}\">{1}</a>", result.id, result.title);
                // I would like to use Url.Action, Html.ActionLink, etc. How?
    
                return str;
            }
        }
    }
    

    using System.Web.Mvc 允许访问 HtmlHelpers ,但像ActionLink这样的便捷方法似乎并不存在。

    4 回复  |  直到 15 年前
        1
  •  9
  •   Matt Kocaj Alina Mishina    15 年前

        public static string FooterEditLink(this HtmlHelper helper,
            System.Security.Principal.IIdentity user, string loginText, string logoutText)
        {
            if (user.IsAuthenticated)
                return System.Web.Mvc.Html.LinkExtensions.ActionLink(helper, logoutText, "Logout", "Account",
                    new { returnurl = helper.ViewContext.HttpContext.Request.Url.AbsolutePath }, null);
            else
                return System.Web.Mvc.Html.LinkExtensions.ActionLink(helper, loginText, "Login", "Account",
                    new { returnurl = helper.ViewContext.HttpContext.Request.Url.AbsolutePath }, null);
        }
    

    编辑:
    Url.Action() 方法是替换 this HtmlHelper helper 有点像 this UrlHelper urlHelp 然后打电话 urlHelp.Action(...

    希望这有帮助。

        2
  •  1
  •   Skiltz    15 年前

    一个简单的gravatar html帮助程序,您的

      public static string GetGravatarURL(this HtmlHelper helper, string email, string size, string defaultImagePath)
        {
    
            return GetGravatarURL(email, size) + string.Format("&default={0}", defaultImagePath);
    
        }
    
        3
  •  0
  •   Andrea Balducci    15 年前

    只需使用扩展方法即可扩展默认的HtmlHelper和UrlHelper(因此,方法中的第一个参数是xxxHelper)。

    或者,您可以使用所需的方法创建基本视图,并使用视图的Html或URL变量。

        4
  •  -1
  •   ZombieSheep    15 年前

    在我看来,您不应该试图在代码中使用ActionLink。MVC的整个概念是将逻辑与显示分离,因此您应该坚持这一点。

    我建议您将结果对象传递给视图(可能通过ViewData),然后在视图中内联解析结果。例如

    <%= Html.ActionLink(result.title,"/showresult/" + result.id, "myController") %>