Закодировать значение dataview в ASP.NET MVC Actionlink
-
05-09-2019 - |
Вопрос
Я использую Microsoft Ajax Template DataView для привязки значений к шаблону.Я могу это сделать, и это работает так, как вы и ожидали:
<h3>{{ID}}</h3>
<p>{{Address}}</p>
Однако я пытаюсь создать ссылку на действие, в которой есть идентификатор.
<h2><%= Html.ActionLink(Html.AttributeEncode("{{Name}}"), "Index", "Restaurant", new { Id = Html.AttributeEncode("{{ID}}") }, null)%></h2>
Имя отображается в виде текста ссылки, как я и хотел, но ссылка не включает идентификатор, вместо этого у нее есть %7B%7BID%7D%7D
Как мне добиться, чтобы идентификатор был правильно проанализирован и добавлен к ссылке?
Решение 2
Наконец-то это заработало, я не знаю, был ли я глуп или это из-за отсутствия документации, но вот как привязать значение dataview к ссылке.
<h2><a sys:href="{{'Restaurant/Index/' + ID}}">{{Name}}</a></h2>
Фактическая часть маршрута URL должна быть заключена в одинарные кавычки, и вам нужно использовать sys:href вместо href .
Другие советы
Вполне возможно, что дополнительные скобки сбивают его с толку.Попробуйте присвоить значения переменным и использовать переменные в ActionLink.Вы могли бы выполнить назначение в верхней части представления, а затем повторно использовать их по всему представлению.чтобы избежать необходимости перекодировать их повсюду.
<% var id = Html.AttributeEncode( "{{ID}}" );
var name = Html.AttributeEncode( "{{Name}}" );
%>
<h2><%= Html.ActionLink(name, "Index", "Restaurant", new { Id = id }, null)%></h2>
Его хорошая практика должна включать '<%= Url.Action("Index", "Restaurant")%>'
при создании URL-адреса вручную, чтобы избежать проблем с именем приложения и конфликтующими URL-адресами.