Asp.net mvc 如何从自定义帮助程序使用ASP.NET MVC Html帮助程序?
我有几个页面列出了搜索结果,对于我想显示的每个结果,我想创建一个自定义视图帮助器,以避免重复显示代码 如何从自定义视图辅助对象访问方便的现有视图辅助对象?例如,在我的自定义视图帮助程序中,我想使用Url.Action()、Html.ActionLink等。如何从自定义视图帮助程序访问它们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
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助手不能调用另一个。