2017-05-09 2 views
0

Nur frage mich, stelle ich mir eine Checkbox wie dieses:C# ASP.MVC Get Wert Checkbox Html.EditFor und JavaScript

<input type="checkbox" id="situationcontrol" name="situationcontrol"> 

ich überprüfen könnte, wenn diese Option aktiviert ist oder nicht, indem Sie diesen JavaScript-Code verwenden:

var situationcontrol = $("#situationcontrol").prop('checked'); 

Jetzt frage ich mich, wie dies funktionieren würde, wenn Sie ein Kontrollkästchen machen @Html.EditorFor

wie dies mit:

@Html.EditorFor(model =>Model.ServiceDeliveryMutableObjects.SituationControl) 

Ich habe versucht, den gleichen JavaScript-Code mit der neu generierten ID

var situationcontrol = $("#ServiceDeliveryMutableObjects.SituationControl").prop('checked'); 

Aber das tut der Arbeit scheint sie zu ändern. Irgendeine Idee, wie das funktionieren würde?

Dank

Edit: Wenn ich Element in Browser kontrollieren, wenn ich @Html.EditFor enter image description here

+0

Könnten Sie auch den von @ Html.EditorFor (model => Model.ServiceDeliveryMutableObjects.SituationControl) erzeugten HTML-Code posten? – User3250

+0

@VivekSingh Ich habe die Frage mit einem Bild aktualisiert. Das erhalte ich, wenn ich mit der rechten Maustaste klicke -> Element im Browser überprüfen. –

Antwort

2

EDIT

Snap Haben Sie nicht zu, dass erst verwenden, wenn Sie die gerenderte Ausgabe geschrieben. Die . ist in HTML-IDs nicht gültig, sodass Razor stattdessen Unterstriche verwendet. Die ID, die Sie auswählen sollten, lautet also #ServiceDeliveryMutalObjects_SituationalControl und nicht #ServiceDeliveryMutalObjects.SituationalControl. Ansonsten gilt der Rest meiner ursprünglichen Antwort.

ORIGINAL

Zuerst tatsächlich, es ist besser zu nutzen:

$('#foo').is(':checked') 

Jetzt, da für die Verwendung von EditorFor, technisch, dies ändert nichts. Die ID basiert offensichtlich auf dem Objektgraph, d. H. #ServiceDeliveryMutalObjects_SituationalControl, aber nichts ändert sich an der tatsächlichen Wiedergabe des HTML-Elements. Ich habe hier "technisch" betont, denn während dies der Fall sein sollte, gibt es keine Standard-Editor-Vorlage, die tatsächlich eine Checkbox-Eingabe rendern würde. Der Standardwert ist ein Textfeld, und ein Textfeld hat offensichtlich keine checked Eigenschaft. Dies kann korrigiert werden durch:

  1. Verwenden Sie stattdessen CheckBoxFor. Auf diese Weise erhalten Sie eine tatsächliche Checkbox-Eingabe.

  2. diese Eigenschaft Angenommen, ein boolean ist, können Sie die Ansicht Views/Shared/EditorTemplates/Boolean.cshtml mit so etwas wie erstellen:

    @model bool? 
    @Html.CheckBox("", Model) 
    

    Dann wird EditorFor diese Vorlage verwenden, und eine Checkbox Eingabe erzeugen.

Schließlich kann es nur ein Tippfehler in Ihrer Frage, aber Sie wollen kleines „Modell“, nicht „Modell“, auf der rechten Seite des Ausdrucks. Mit anderen Worten, es muss mit der linken Seite des Lambda übereinstimmen.Ich tendiere dazu, model in diesen Ausdrücken zu vermeiden, da es nicht nur mehr Typ als nötig ist, sondern Sie können leicht zwischen "Modell" und "Modell" verwechseln, besonders mit Intellisense's Autocomplete. Zum Beispiel

@Html.EditorFor(m => m.ServiceDeliveryMutableObjects.SituationControl) 
+0

Vielen Dank, Sie haben viel gelöscht :) –

+0

Wenn Sie möchten, können Sie auch die ID und andere Eigenschaften mit der With {.id = "thisorthat", .checked = "false"} -Syntax angeben –

2

können Sie Ihren Code ändern wie diese

Var situationcontrol = $("#ServiceDeliveryMutableObjects_SituationControl").prop('checked'); 

Sie benötigen .in Id von Elementen in mvc reazor entfernen anzuzeigen ist es konvertiert '' Zu '_', wenn wir in Elementnamen zur Verfügung stellen.