Создание 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)