我正在寻找一种通过C#生成Html.ActionLink
的方法。
我怎么去做这个,我试过这个:
public static string CreateSubjectTree(SqlConnection con)
{
StringBuilder result = new StringBuilder();
result.Append("Html.ActionLink(\"Blabla\", \"Read\", \"Chapter\")");
return Convert.ToString(result);
}
这将返回原始HTML
而不是生成的代码。
我想要它完成的是创建一个用Controller
调用一些参数的链接。
答案 0 :(得分:3)
您不需要返回字符串。拿一个MvcHtmlString
。创建一个这样的扩展方法:
public static MvcHtmlString CustomActionLink( this HtmlHelper htmlHelper, SqlConnection con)
{
//do your retrival logic here
// create a linktext string which displays the inner text of the anchor
// create an actionname string which calls the controller
StringBuilder result = new StringBuilder();
result.Append(linktext);
result.Append(actionname);
return new MvcHtmlString(result);
}
在您看来:
@Html.CustomActionLink(SqlConnection con)
您需要导入名称空间System.Web.Mvc.Html
并确保您的路线是在RouteConfig.cs
或定义自定义路线时定义的。
重要提示:返回的最终字符串(结果)必须采用以下格式:
<a href='/Controller/Action/optionalrouteparameters'>LinkText</a>
MvcHtmlString()确保每个可能的字符如=,? &安培; \正确转义并正确呈现链接
供参考,请参阅msdn:http://msdn.microsoft.com/en-gb/library/dd493018(v=vs.108).aspx
答案 1 :(得分:2)
using System.Web.Mvc.Html;
namespace MyHelper
{
public static class CustomLink
{
public static IHtmlString CreateSubjectTree(this HtmlHelper html, SqlConnection con)
{
// magic logic
var link = html.ActionLink("Blabla", "Read", "Chapter").ToHtmlString();
return new MvcHtmlString(link);
}
}
}
Use in View:
@Html.CreateSubjectTree(SqlConnection:con)
网络配置:
<system.web.webPages.razor>
...
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="MyHelper" />
...
</namespaces>
</pages>
</system.web.webPages.razor>
答案 2 :(得分:1)
Html.ActionLink
的重载已经达到你想要的效果:
@Html.ActionLink("Link text", "action", "controller", new { id = something }, null)