用C#字符串创建Html.ActionLink

时间:2013-11-15 21:58:28

标签: c# asp.net-mvc asp.net-mvc-4 html.actionlink

我正在寻找一种通过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调用一些参数的链接。

3 个答案:

答案 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)