gpt4 book ai didi

c# - 在自定义 Html Helper 中获取 Action 的 MvcHtmlString

转载 作者:行者123 更新时间:2023-12-01 22:34:16 24 4
gpt4 key购买 nike

我正在尝试构建一个自定义 html 帮助器,它将根据传递给此 html 帮助器的操作显示动态内容,这是我到目前为止所拥有的

// the Area helper class
public static class AreaHelper
{
public static AreaBuilder CustomArea(this HtmlHelper helper)
{
return new AreaBuilder();
}
}
// the area builder class
public class AreaBuilder: IHtmlString
{
private string name;
private string caption;
private string action;
private string controller;
private object routeData;

public AreaBuilder Name(string name)
{
this.name=name;
return this;
}

public AreaBuilder Action(string action,string controller,object routeData)
{
this.action=action;
this.controller=controller;
this.routeData=routeData;
return this;
}

public string ToHtmlString()
{
var html=new StringBuilder();
html.AppendFormat(@"<div id=""{0}"" class=""area"">",name);
html.AppendFormat(@"<div class=""area-caption"">{0}</div>",caption);
html.AppendFormat(@"<div class=""area-content"">{0}</div>",**what should i do here**);
html.Append("</div>");
return html.ToString();
}
}

我无法执行正确的步骤来获取我拥有的 ActionResult 的内容(action、controller、routeData)

换句话说,我怎样才能得到mvchtmlstring形式的Action?

感谢任何帮助

最佳答案

您可以使用以下内容

解决方案一

  1. 添加对 System.Web.Mvc.Html 的引用;
  2. ChildActionExtensions.Action(YourHtmlHelper, action,controller,routeData);

所以你的代码将变得像

// the area builder class
public class AreaBuilder: IHtmlString
{
private string name;
private string caption;
private string action;
private string controller;
private object routeData;
private HtmlHelper htmlHelper;

public AreaBuilder Name(string name)
{
this.name=name;
return this;
}

public AreaBuilder HtmlHelper(HtmlHelper helper)
{
this.htmlHelper=helper;
return this;
}

public AreaBuilder Action(string action,string controller,object routeData)
{
this.action=action;
this.controller=controller;
this.routeData=routeData;
return this;
}

public string ToHtmlString()
{
var html=new StringBuilder();
html.AppendFormat(@"<div id=""{0}"" class=""area"">",name);
html.AppendFormat(@"<div class=""area-caption"">{0}</div>",name);
html.AppendFormat(@"<div class=""area-content"">{0}</div>",ChildActionExtensions.Action(htmlHelper, action,controller,routeData));
html.Append("</div>");
return html.ToString();
}
}

和您的区域 Html 助手

// the Area helper class
public static class AreaHelper
{
public static AreaBuilder CustomArea(this HtmlHelper helper)
{
return new AreaBuilder().HtmlHelper(helper);
}
}

解决方案二

还有另一种方法可以实现您想要的效果,您可以制作如下所示的内容

// the area builder class
public class AreaBuilder: IHtmlString
{
private string name;
private string caption;
private MvcHtmlString content; // to allow the use to add html content

public AreaBuilder Name(string name)
{
this.name=name;
return this;
}

public AreaBuilder Content(Func<object, HelperResult> html)
{
var detail=html.Invoke(null);
this.content=MvcHtmlString.Create(detail.ToHtmlString());
return this;
}

public string ToHtmlString()
{
var html=new StringBuilder();
html.AppendFormat(@"<div id=""{0}"" class=""area"">",name);
html.AppendFormat(@"<div class=""area-caption"">{0}</div>",caption);
html.AppendFormat(@"<div class=""area-content"">{0}</div>",content.ToHtmlString());
html.Append("</div>");
return html.ToString();
}
}

并且在您的代码中,您执行以下操作,尽管我认为名称应该是 CustomArea 而不是 CustomButton。

@Html.CustomArea().Name("MyArea").Content(@<text>@Html.Action("YourAction","YourController",...your routing data)</text>)

希望这对你有帮助

关于c# - 在自定义 Html Helper 中获取 Action 的 MvcHtmlString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29195889/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com