0

Ich schreibe derzeit eine asp.net Core-MVC-App und ich bin neu zu .net-Core. Ich bin begeistert von Tag-Helfer und ich versuche, mein Gehirn um sie zu wickeln. Die einfachen, die ich bekomme und habe ein paar gemacht, aber die, die ich wirklich brauche, ist die <input type="checkbox"> durch bootstrap toggle zu ersetzen.asp.net Kern MVC-Tag Helfer für Bootstrap toggle

ich in der Lage, die Anzeige des Knie zum Laufen zu bringen meine Gewohnheit „boolean“ Tag-Helfer

mit
<div class="form-group"> 
     <label asp-for="IsBusiness"></label> 
     <boolean asp-for="IsBusiness" class="form-control"/> 
     <span asp-validation-for="IsBusiness" class="text-danger"></span> 
    </div> 

jedoch das Problem, das ich habe, ist der Wert der Checkbox Speichern/Toggle, wenn der Benutzer abwechselnd Klicken Sie auf und dann auf Speichern. Ich erhalte einen Fehler: "The value 'on' is not valid for Login Is A Business?." in der Formularvalidierung.

Kann mir bitte jemand helfen, das herauszufinden, wird dies ein verstecktes Feld oder etwas brauchen?

Hier ist mein Tag Helfer so weit:

using Microsoft.AspNetCore.Mvc.TagHelpers; 
using Microsoft.AspNetCore.Mvc.ViewFeatures; 
using Microsoft.AspNetCore.Razor.TagHelpers; 

namespace Bidz4Hire.Utility.TagHelpers 
{ 
    // Creates <input type="checkbox" data-toggle="toggle" /> 
    [HtmlTargetElement("boolean")] 
    public class BooleanTagHelper : InputTagHelper 
    { 

     public BooleanTagHelper(IHtmlGenerator generator) : base(generator) 
     { 
     } 

     public string AspFor { get; set; } 

     public override void Process(TagHelperContext context, TagHelperOutput output) 
     { 
     output.TagName = "input"; 
     output.TagMode = TagMode.SelfClosing; 

     output.Attributes.SetAttribute("type", "checkbox"); 
     output.Attributes.SetAttribute("id", For.Name); 
     output.Attributes.SetAttribute("name", For.Name); 
     output.Attributes.SetAttribute("data-toggle", "toggle"); 
     output.Attributes.SetAttribute("data-on", "Yes"); 
     output.Attributes.SetAttribute("data-off", "No"); 
     output.Attributes.SetAttribute("value", "true"); //so the checked value returned is "true" not "on" 
     if (Convert.ToBoolean(For.Model) == true) //check the model value 
     { 
      output.Attributes.SetAttribute("checked", "checked"); //turns the toggle to "Yes" initially 
     } 
    } 
} 

Antwort

0

Okay, so nach Stunden Herumspielen verschiedene Dinge versucht und Scheuern im Internet habe ich es endlich. Ich habe den Code oben auf die Arbeitsversion bearbeitet.

Grundsätzlich müssen Sie zwei Dinge tun:

  1. Ausgang ein Attribut „Wert“ auf „true“ so, wenn das Kontrollkästchen aktiviert ist (Toggle auf „Ja“) wird der Wert zurückgegeben wird, ist „true“ anstelle von "on", was der Standard für Checkboxen ist.
  2. Überprüfen Sie die Modelleigenschaft, und fügen Sie ein Attribut für "überprüft" hinzu, wenn es wahr ist.

Ich habe beide im ursprünglichen Beitrag mit Kommentaren hervorgehoben.

Ich hoffe, dass dies jemand anderen da draußen hilft, da ich eine Menge Zeit verschwendete, um dies herauszufinden. Toggle Blick besser als Kontrollkästchen in modernen Web-Apps, so dass es die Mühe IMHO wert war.