2016-12-14 1 views
0

Ich versuche, einen neuen Tag-Helfer zu testen, den ich versuche zu erstellen. Ich bin auf einen Mangel der neuen .net-Kernvalidierung gestoßen und kann die Klassennachprüfung nicht ändern. Also, wenn ich meinen Fehlern einen roten Hintergrund geben wollte, ist die Spanne immer da und wird sich nicht ändern. Also habe ich beschlossen, meinen eigenen Tag-Helfer zu machen. Das Problem ist, dass ich es nicht zum Funktionieren bringen oder auslösen kann. Ich kann nicht einmal einen Bruchpunkt erreichen. Hier ist, was ich bisher für einen Tag-Helfer habe.Benutzerdefinierte Tag-Helper-Debugging

namespace MusicianProject.TagHelpers 
{ 
    // You may need to install the Microsoft.AspNetCore.Razor.Runtime package into your project 
    [HtmlTargetElement("invalid-class", Attributes = "validation-class")] 
    public class ValidateClassTagHelper : TagHelper 
    { 
     public ValidateClassTagHelper(IHtmlGenerator generator) 
     { 

     } 
     public override Task ProcessAsync(TagHelperContext context, TagHelperOutput output) 
     { 


      return base.ProcessAsync(context, output); 
     } 


     public override void Process(TagHelperContext context, TagHelperOutput output) 
     { 

      output.Attributes.Add("class", "test"); 
      var attr = context.AllAttributes; 


     } 
    } 
} 

und hier ist die Verwendung in meiner Registeransicht.

<div class="container"> 

    <form asp-controller="Account" asp-action="Register" method="post"> 

     <div class="col-md-4 col-md-offset-4"> 

      <div class="form-group"> 
       <label asp-for="FirstName"></label> 
       <input class="form-control" type="text" asp-for="FirstName" /> 
       <span asp-validation-for="FirstName" class="text-danger"></span> 
      </div> 

      <div class="form-group"> 
       <label asp-for="LastName"></label> 
       <input class="form-control" asp-for="LastName" /> 
       <span asp-validation-for="LastName" class="text-danger"></span> 
      </div> 

      <div class="form-group"> 
       <label asp-for="Email"></label> 
       <input class="form-control" type="text" asp-for="Email" /> 
       <span validation-class="alert alert-danger" invalid-class="test" asp-validation-for="Email" class="text-danger"></span> 
      </div> 

      <div class="form-group"> 
       <label asp-for="Password"></label> 
       <input asp-for="Password" type="password" id="password" class="form-control" /> 
       <span asp-validation-for="Password" class="text-danger"></span> 
      </div> 

      <div class="form-group"> 
       <label asp-for="ConfirmPassword"></label> 
       <input asp-for="ConfirmPassword" type="password" id="confirm-password" class="form-control" /> 
       <span asp-validation-for="ConfirmPassword" class="text-danger"></span> 
      </div> 


      <div class="btn-group text-center"> 
       <button class="btn btn-default">Sign up!</button> 
       <button class="btn btn-danger">Cancel</button> 
      </div> 
     </div> 

    </form> 
</div> 

@section Scripts { 
    @{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); } 
} 

Und ja, ich habe in meiner Datei _ViewImports.cshtml den Namen der Projekte Assembly registrieren.

@using MusicianProject 
@using MusicianProject.Models 
@addTagHelper "*, Microsoft.AspNetCore.Mvc.TagHelpers" 
@addTagHelper "*, MusicianProject" 

Jetzt bin ich nicht sicher, ob die Platzierung bestimmter Dateien Angelegenheiten, aber meine _ViewImports.cshtml Datei in meinen Ansichten Ordner root (src/Ansichten/_ViewImports.cshtml), und mein Tag Helfer haben ihre eigenen befindet sich Ordner im Stammverzeichnis (src/TagHelpers/*).

Was habe ich vermisst und wie kann ich es korrigieren?

Antwort

1

Sie haben 2 Ausgaben

1- Die HtmlTargetElement ist der Name des Tags, wo dieser Tag Helfer verwendet werden kann, zB: Spannweite, div, Tisch ... 2- Sie das Tag nicht genutzt haben Helfer in Ihrem Code, dementsprechend wird es nie gefeuert werden. Es wird nicht standardmäßig auf alle Tags angewendet, die in HtmlTargetElement angegeben sind. Sie sollten es aufrufen, indem Sie dem span-Tag das Attribut validate-class hinzufügen.

Um mehr über Taghelfer zu erfahren, überprüfen Sie bitte diesen Link https://blogs.msdn.microsoft.com/msgulfcommunity/2015/06/17/developing-custom-tag-helpers-in-asp-net-5/

1

Wenn ich richtig verstanden habe, ist Ihr Problem, dass Ihr Breakpoint nicht getroffen wird. Das Problem liegt hier:

[HtmlTargetElement("invalid-class", Attributes = "validation-class")] 

Der erste Parameter von HTMLTargetElement den Tag Sie zielen, so in Ihrem Fall, die „Spanne“ sein würde. Du hast dort einen Klassennamen eingegeben.

Auf diese Weise werden zumindest Ihre Breakpoints getroffen und von da an bin ich sicher, dass Sie den Rest herausfinden werden.

Verwandte Themen