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

Asp.net mvc 如何从自定义帮助程序使用ASP.NET MVC Html帮助程序?,asp.net-mvc,Asp.net Mvc,我有几个页面列出了搜索结果,对于我想显示的每个结果,我想创建一个自定义视图帮助器,以避免重复显示代码 如何从自定义视图辅助对象访问方便的现有视图辅助对象?例如,在我的自定义视图帮助程序中,我想使用Url.Action()、Html.ActionLink等。如何从自定义视图帮助程序访问它们 using System; namespace MvcApp.Helpers { public class SearchResultHelper { public static

我有几个页面列出了搜索结果,对于我想显示的每个结果,我想创建一个自定义视图帮助器,以避免重复显示代码

如何从自定义视图辅助对象访问方便的现有视图辅助对象?例如,在我的自定义视图帮助程序中,我想使用Url.Action()、Html.ActionLink等。如何从自定义视图帮助程序访问它们

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;
        }
    }
}
使用系统;
名称空间MvcApp.Helpers
{
公共类搜索结果器
{
公共静态字符串显示(结果)
{
字符串str=“”;
//在此处生成搜索结果的HTML
//而不是写作
str+=String.Format(“”,result.id,result.title);
//我想使用Url.Action、Html.ActionLink等。如何使用?
返回str;
}
}
}

使用System.Web.Mvc
可以访问
HtmlHelpers
,但似乎没有像ActionLink这样的方便方法。

此示例应该对您有所帮助。此帮助程序根据用户是否登录呈现不同的链接文本。它演示了在我的自定义助手中使用ActionLink:

    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()
方法,只需将
此HtmlHelper
参数替换为类似
此UrlHelper urlHelp
的内容,然后调用
urlHelp.Action(…


希望这能有所帮助。

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

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

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

一个简单的gravatar html帮助程序,您的类也需要是静态的

  public static string GetGravatarURL(this HtmlHelper helper, string email, string size, string defaultImagePath)
    {

        return GetGravatarURL(email, size) + string.Format("&default={0}", defaultImagePath);

    }

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


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

我明白您的观点并同意。但是,这意味着我需要在多个地方重复解析/显示代码/逻辑,这是我试图避免的。没有充分的理由说明一个Html助手不能调用另一个。