2016-12-10 1 views
3

Я хочу продлить Buildin InputTagHelpers из ASP.NET Core, простого примераNullReferenceException при расширении класса ASP.NET ядра InputTagHelper без Для выражения

[HtmlTargetElement("input")] 
class TestTagHelper:InputTagHelper{ 
    public override void Process(TagHelperContext context, TagHelperOutput output) { 
     base.Process(context,output); 
    } 
} 

Этих должен вызвать помощник входного тега по умолчанию. Его работа прекрасна, когда атрибут From, например <input asp-for="SomeModelAttribute" />, но не тогда, когда у меня есть элементы, которые не связаны ни с каким атрибутом модели, как кнопка отправки <input type="submit" />. В этом случае я получил исключение NullReferenceException.

Согласно source code of the helper class, кажется, что следующие строки вызывает вопрос:

var metadata = For.Metadata; 
var modelExplorer = For.ModelExplorer; 

Но странное дело, когда я использую Buildin taghelper без наследования от моего класса (непосредственно InputTagHelper), он работает, независимо от того, присутствует ли атрибут For. Мне нужно решение для этого, потому что, когда я вызываю метод Process базового класса только тогда, когда For не является нулевым, он разбивает мои входные элементы: <input type="submit" /> отображается как <input />, который не имеет смысла в этом месте.

ответ

0

Вы можете изменить свой атрибут TagHelper, чтобы активировать только элементы input, которые имеют атрибут asp-for и являются самозакрывающимися.

Это то, что InputTagHelper класс использует по умолчанию:

[HtmlTargetElement("input", Attributes = "asp-for", TagStructure = TagStructure.WithoutEndTag)]