Следующий помощник входного тега:
<input asp-for = "Query.Skip" type = "hidden" name = "Skip" />
отображается как:
<input type = "hidden" name = "Skip" id = "Query.Skip" value = "0" />
Как мне сделать так, чтобы атрибут id
не отображался? Мне не нужен атрибут id
. Я пробовал id = "@null"
, но всё равно рендерится.
Хм, только не используйте помощник по тегам и введите это вручную, оставив id
Джереми Лейкман, да, это может быть слишком. МихалТурчин, именно об этом я подумал после того, как опубликовал вопрос, но оставил его, чтобы посмотреть, есть ли встроенный способ игнорирования атрибута, которого я не знал. Думаю, это ответ на этот вопрос, спасибо вам обоим!
Вы можете написать простой переопределяющий помощник тега, который удаляет атрибут id
. Помощник тега переопределения может ориентироваться на конкретные элементы, а не на общую службу.
@DaveB, мой опыт написания вспомогательных функций тегов ограничен. Я возился только тогда, когда это было необходимо, и, возможно, чтобы сделать что-то простое. Есть ли у вас пример, на который я мог бы посмотреть, чтобы переопределить Tag Helper, как вы предлагаете?
Я опубликовал решение. Помощник тега переопределения запускается при добавлении пользовательского атрибута к вашему элементу input
. Пользовательский атрибут соответствует целевому набору с помощью [HtmlTargetElement(Attributes = "noId")]
.
Вот простой переопределяющий помощник тега, который удаляет атрибут id
.
Добавьте настраиваемый атрибут, который запускает переопределенный помощник тега. В приведенном ниже примере атрибут noId
запускает переопределение.
В помощнике по переопределению тегов позвольте Razor обработать вывод по умолчанию, используя base.Process(context, output);
.
Удалите атрибуты id
и пользовательские noId
из выходных данных. Конечным результатом будет:
<input type = "hidden" name = "Skip" value = "0" />
Вид бритвы
@page
@model WebApplication1.Pages.IndexModel
@using WebApplication1.Helpers
@addTagHelper WebApplication1.Helpers.NoIdTagHelperTagHelper, WebApplication1
@{
}
<input noId asp-for = "Query.Skip" type = "hidden" name = "Skip" />
Ноидтагхелпер.cs
using Microsoft.AspNetCore.Razor.TagHelpers;
namespace WebApplication1.Helpers
{
[HtmlTargetElement(Attributes = "noId")]
public class NoIdTagHelperTagHelper : TagHelper
{
public override void Process(TagHelperContext context, TagHelperOutput output)
{
base.Process(context, output);
output.Attributes.Remove(output.Attributes.First(t => t.Name == "noId"));
output.Attributes.Remove(output.Attributes.First(t => t.Name == "id"));
}
}
}
Именно то, что мне нужно! Спасибо! Написание элементов input
вручную действительно помогло, но к элементам select
это не так легко применить. Этот помощник тегов делает именно то, что я хочу, позволяя мне использовать помощники тегов input
и select
и их возможности привязки данных. Делает весь опыт намного более естественным. Еще раз спасибо!
Я рад, что это сработало. Если вам нужно внести очень конкретные изменения в выходные данные элемента input
или элемента select
, добавьте имя тега в цель HtmlTargetElement
. Например. [HtmlTargetElement("select", Attributes = "noId")]
.
Помощник входного тега внутренне использует зарегистрированный сервис
IHtmlGenerator
, а затем копирует атрибуты. Вы можете заменить эту услугу, если вам не нужныid
свойства. Но это, вероятно, повлияет на маркировку и проверку... Итак, более важный вопрос: «Почему?»