>

이 코드가 있다고 가정 해 봅시다. <input type="hidden" asp-for="CurrentThread.ThreadId" />

이것은 "CurrentThread_ThreadId"라는 이름의 숨겨진 입력을 생성합니다. 그러나 이름을 "ThreadId"로만 설정하고 싶습니다. 기본적으로 부모 클래스는 무시하고 마지막 속성의 이름 만 원합니다.

나는 쉽게 할 수있다 : <input type="hidden" asp-for="CurrentThread.ThreadId" name="ThreadId" /> 그러나 나는 지능을 잃고 있습니다.

Intellisense로 "ThreadId"라는 이름을 생성하기 위해 할 수있는 일이 있는지 궁금합니다.

  • 답변 # 1

    기존 입력 태그 도우미를 확장하여 name 에 대한 사용자 정의 값을 설정할 수 있습니다  속성.

    [HtmlTargetElement("input", TagStructure = TagStructure.WithoutEndTag)]
    public class MyTagHelper : Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper
    {
        [HtmlAttributeName("asp-short-name")]
        public bool IsShortName { set; get; }
        public MyTagHelper(IHtmlGenerator generator) : base(generator)
        {
        }
        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            if (IsShortName)
            {
                string nameAttrValue = (string)output.Attributes.Single(a => a.Name == "name").Value;
                output.Attributes.SetAttribute("name", nameAttrValue.Split('.').Last());
            }
            base.Process(context, output);
        }
    }
    
    

    맞춤 태그 도우미를 등록하려면 _ViewImports.cshtml 에 추가해야합니다. :

    @addTagHelper *, [AssemblyName]
    
    

    그러면 사용할 수 있습니다 :

    <input type="hidden" asp-for="CurrentThread.ThreadId" asp-short-name="true"/>
    
    

    참고 :@Stephen Muecke가 언급했듯이 기본 모델 바인딩은 작동하지 않습니다. 맞춤 모델 바인더를 만들거나 다른 기술을 사용하여 요청에서 모델 값을 검색해야 할 수도 있습니다

관련 자료

  • 이전 SonarQube 6.7 - sonarqube 67 - 새로운 이슈 식별
  • 다음 html - 새로운 줄에 들여 쓰기하는 방법