2017-01-24 2 views
0

Ich habe ein Problem.Checkbox Wert ist immer falsch ASP MVC 5

Was auch immer ich mache, ist mein Checkbox-Wert immer falsch.

Ich benutze dieses Modell

public class ActEntry : BaseEntity 
{ 
    [Required] 
    public int DepartmentId { get; set; } 

    [Required] 
    [Display(Name = "Тип")] 
    public EnergyType EnergyType { get; set; } 

    [Required] 
    [Display(Name = "Имя объекта установки")] 
    public string Name { get; set; } 

    [Required] 
    [Display(Name = "Позиция")] 
    public string Postition { get; set; } 

    [Required] 
    [Display(Name = "Проектная")] 
    public bool HasDoc1 { get; set; } 

    [Required] 
    [Display(Name = "Исполнительная")] 
    public bool HasDoc2 { get; set; } 

    [Required] 
    [Display(Name = "Статус")] 
    public State State { get; set; } 

    [Display(Name = "Дата сдачи")] 
    public DateTime? DateOfCommit { get; set; } 

    [Required] 
    [Display(Name = "Акт допуска")] 
    public string Act { get; set; } 

    [Required] 
    [Display(Name = "Год акта")] 
    public int Year { get; set; } 
} 

Meine Form:

<div class="modal fade" id="editRow"> 
    <div class="modal-dialog"> 
    <div class="modal-content"> 
     <div class="modal-header"> 
     <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button> 
     <h2 class="modal-title" id="modalTitle"></h2> 
     </div> 
     <div class="modal-body"> 
     <form class="form-horizontal" method="post" id="detailsForm"> 
      <input type="hidden" id="Id" name="Id"> 
      <input type="hidden" id="DepartmentId" name="DepartmentId" value="@Model.DepartmentId"> 
      <input type="hidden" id="EnergyType" name="EnergyType" value="@Model.EnergyType"> 
      <div class="form-group"> 
      <label for="Name" class="control-label col-xs-3">Имя объекта установки</label> 
      <div class="col-xs-9"> 
       <input class="form-control" id="Name" name="Name"> 
      </div> 
      </div> 
      <div class="form-group"> 
      <label for="Postition" class="control-label col-xs-3">Позиция</label> 
      <div class="col-xs-9"> 
       <input type="text" class="form-control" id="Postition" name="Postition"> 
      </div> 
      </div> 
      <div class="form-group"> 
      <label for="Postition" class="control-label col-xs-3">Наличие документации</label> 
      <div class="col-xs-9"> 
       <label class="checkbox-inline"> 
       <input type="checkbox" name="HasDoc1" value="true">Проектная</label> 
       <label class="checkbox-inline"> 
       <input type="checkbox" name="HasDoc2" value="true">Исполнительная</label> 
      </div> 
      </div> 

      <div class="form-group"> 
      <label for="Act" class="control-label col-xs-3">Акт допуска</label> 
      <div class="col-xs-9"> 
       <input type="text" class="form-control" id="Act" name="Act"> 
      </div> 
      </div> 
      <div class="form-group"> 
      <label for="Year" class="control-label col-xs-3">Год акта</label> 
      <div class="col-xs-9"> 
       <input type="text" class="form-control" id="Year" name="Year"> 
      </div> 
      </div> 
      <div class="form-group"> 
      <label class="control-label col-xs-3"></label> 
      <div class="col-xs-9"> 
       <button class="btn btn-primary" type="button" onclick="save()">Сохранить</button> 
      </div> 
      </div> 
     </form> 
     </div> 
    </div> 
    </div> 
</div> 

Hier sind diese Kontrollkästchen:

<label class="checkbox-inline"> 
    <input type="checkbox" name="HasDoc1" value="true"> 
    <input type="hidden" name="HasDoc1" value="false">Проектная</label> 
<label class="checkbox-inline"> 
    <input type="checkbox" name="HasDoc2" value="true"> 
    <input type="hidden" name="HasDoc2" value="false">Исполнительная</label> 

Meine Ajax-Skript:

function save() { 
    if (!$('#detailsForm').valid()) return false; 

    $.ajax({ 
    type: "POST", 
    url: "/Ajax/CreateOrUpdate/", 
    data: $('#detailsForm').serialize(), 
    success: function() { 
     $('#editRow').modal('hide'); 
     updateTable(); 
     successNoty('Успешно сохранено') 
    } 
    }); 
}; 

Als ich serialisierte Werte sah, bemerkte ich, dass HasDoc2 & HasDoc1 falsch sind. Wenn ich sie in Chrome einchecke und sie mit $('#HasDoc1').val() & $('#HasDoc2').val() teste, werde ich immer falsch.

Als ich ihre Namen hasDoc1 ändern & hasDoc2, plötzlich ich gewünscht werden, wenn ich sie überprüfen. Was mache ich falsch?

Gibt es spezielle Regeln für die Benennung von Kontrollkästchen in ASP MVC? Ich habe versucht, Helfer zu verwenden, das Ergebnis ist das gleiche.

+5

Verwenden Sie die 'HtmlHelper' Methoden die korrekte Schreibweise Ihrer Formular-Steuerelemente (für eine Checkbox -' @ Html.CheckBoxFor (m => m.yourProperty) ') - erzeugen Handbuch html' Wert =“ false "' und ein Formular gibt die Name/Wert-Paare seiner Formularsteuerelemente zurück, so dass es immer 'false' postet (es gibt den Status 'checked' nicht zurück) –

+0

@StephenMuecke warum es" false "-Wert hat, wenn explizit angegeben es? Und gibt es Möglichkeiten, es manuell zu tun? –

+0

Sie benannten Kontrollkästchen. Nicht angegebene ID Und in Jquery oder Chrome versuchen Sie, auf es durch ID $ ('# HasDoc1') .val() zuzugreifen. So kann hasDoc1 von der Razor Engine id generiert werden. Bitte prüfe. – Amit

Antwort

0

Sie verwenden den gleichen Namen für beide Eingabe (Kontrollkästchen und ausgeblendet), und auch mit JQuery können Sie Kontrollkästchen Werte mit prop("checked") erhalten.

val() Methode gibt den Wert von value Attribut, siehe folgendes Beispiel:

<html> 
 
    <head> 
 
    <script src="https://code.jquery.com/jquery-3.1.0.js"></script> 
 
    </head> 
 
    <body> 
 
    Click to test differents ways to get "value" of checkboxes:<br/> 
 
    <input type="checkbox" id="test1" onchange="javascript:console.log(this.checked)"/>this.checked<br/> 
 
    <input type="checkbox" id="test2" onchange="javascript:console.log($('#test2').prop('checked'))"/>$('#test2').prop('checked')<br/> 
 

 
    <input type="checkbox" id="HasDoc1" onchange="javascript:console.log(this.checked)"/>this.checked<br/> 
 
    <input type="checkbox" id="HasDoc2" onchange="javascript:console.log($('#HasDoc2').prop('checked'))"/>$('#HasDoc2').prop('checked')<br/> 
 

 
    </body> 
 
</html>

Ich hoffe, es hilft Ihnen, bye.

0

Do not use same ID in same document, because it is against the specification.IDs should be unique.Here's a basic example:https://jsfiddle.net/dhirenpateldev/dke0s8nL/6/

+0

ok, ich wie du gesagt hast. Das Problem bleibt bestehen. Ich bekomme & HasDoc1 = false & HasDoc2 = false .... Was ist los mit meinem Code ... –

+1

@EvgenyMitrokhin. Hier ist das Beispiel für mich arbeite ich Checkbox-Wert mit jquery. https://jsfiddle.net/dhirenpateldev/dke0s8nL/13/ –