Создание Html.ActionLink в строке C#

Я ищу способ генерировать Html.ActionLinkс через C#.

Как бы я пошел и сделать это, я попробовал это:

public static string CreateSubjectTree(SqlConnection con)
{
    StringBuilder result = new StringBuilder();

    result.Append("Html.ActionLink(\"Blabla\", \"Read\", \"Chapter\")");

    return Convert.ToString(result);
}

Это возвращает сырье HTML а не сгенерированный код.

То, что я хочу сделать, это создать ссылку, которая вызывает Controller с некоторыми параметрами.

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

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>

Там перегрузка Html.ActionLink это уже делает то, что вы хотите:

@Html.ActionLink("Link text", "action", "controller", new { id = something }, null)
Другие вопросы по тегам