2016-08-04 10 views
-1

Ich habe Ajax verwendet, um Informationen vom Controller abzurufen und sie als eine Liste von Checkboxen in meiner Ansicht anzuzeigen.Checkbox, die nicht an Controller gebunden ist

$(document).ready(function() { 
    $('#submitButton').hide(); //hide some buttons 
    $("#Name").hide(); 
    $("#Contact").hide(); 
    $("#Desc").hide(); 
    $("#PMeeting").hide(); 
    $("#Params").hide(); 

    $('#SelectedTeam').change(function() { 
     $('#content').html(''); 
     $.ajax({ 
      url: '/Audits/GetAuditParams', //this function retrieves a list of objects 
      type: "POST", 
      dataType: "json", 
      data: { 
       'tn': $('#SelectedTeam').val(), 
      }, 
      success: function (data) { //here I create the table with checkboxes and labels 
       $.each(data, function (i, item) { 
        var li = $('<input type="checkbox" value="' + item.Included + '" name=Parameters[' + i + '].Included id=Parameters_' + i + '__Included"/>' + 
      '<label for="Parameters[' + i + ']"></label></br>'). 
         text(item.ParameterDescription).prop('checked', item.Included); 

        li.find('label').text(item.ParameterDescription);//I create a set of hiddem fields with the same new, otherwise the collection will be null in the controller 

        $('<input>').attr({ 
         type: 'hidden', 
         id: 'Parameters_' + i + '__Included', 
         name: 'Parameters[' + i + '].Included' 
        }).appendTo('form'); 
        $('#content').append(li); 
       }); 
      } 
     }); 
     $.ajax({ //this is for a different information 
      url: '/Audits/GetAuditInfo', 
      type: "POST", 
      dataType: "json", 
      data: { 
       'tn': $('#SelectedTeam').val(), 
      }, 
      success: function (data) { 
       $("#SProject_ProjectName").val(data.ProjectID); 
       $("#SProject_POC").val(data.POC); 
       $("#SProject_PDescription").val(data.PDescription); 
       $("#SProject_PeriodicMeeting").val(data.PeriodicMeeting); 
       $("#Name").show(); 
       $("#Contact").show(); 
       $("#Desc").show(); 
       $("#PMeeting").show(); 
       $("#Params").show(); 

      } 
     }); 
     $('#submitButton').show(); 

    }); 

    function isChecked(value) { 

     if (value == 1) { 
      return true; 
     } 
     else 
      return false; 
    } 

    $('form').submit(function (e) { 
     $('input[type=checkbox]').prop('checked', function (index, value) { 
      if (value == true) { 
       $('#Parameters_' + index + '__Included').val(1); 
       $('#Parameters_' + index + '__Included').prop('checked', "checked"); 
      } else { 
       $('#Parameters_' + index + '__Included').val(0); 
      } 

     }); 
    }); 
}); 

Das ist mein HTML-Code

<html> 
<head> 
</head> 
<body> 
    <div class="col-md-4" id="content"></div> 
</body> 
</html> 

Aber ich bin immer die Informationen für die Kontrollkästchen in der Steuerung null, ModelStated.isvalid = false und das ist der Fehler

Der Wert ‚0 'gilt nicht für enthalten.

und alle Kontrollkästchen (aktiviert oder deaktiviert) haben den Wert "false".

Antwort

2

Sie sollten ein wenig mehr Informationen bereitstellen und Ihre Aussagen in Form einer spezifischen Frage umformulieren. Ansonsten glaube ich nicht, dass das alles dein Code ist, der wie eine leere HTML-Seite aussieht. Wenn Sie Daten von einem MVC-Controller erhalten möchten, sollten Sie ein Modell erstellen, das Ihr Controller Ihrer Ansicht zur Verfügung stellt. Hier ist ein Beispiel dafür, wie Sie das tun können:

Accessing your model's data from a controller - asp.net

Im Wesentlichen erstellen Sie ein Modell und einen Datenbank-Kontext, dann erstellen Sie eine Instanz des Kontextes, in dem Controller.

public class YourController : Controller 
{ 
    private YourDBContext db = new YourDBContext(); 
    public ViewResult Index() 
    { 
     return View(db.YourData.ToList()); 
    } 

} 

Übergeben Sie das von Ihrem Controller zu Ihrer Ansicht mit Rasierersyntax.

@model IEnumerable<App.Model.Data> 

Verwenden Rasiermesser die Kontrollkästchen, um Ihr Modell

@Html.CheckBoxFor(model => model.data) 

Im Allgemeinen zu binden, finde ich es einfacher, mehr Rasierer mit html/Bootstrap und weniger jQuery zu verwenden. Es ist schwierig, das Checkbox-Problem zu lösen, ohne Ihr Modell oder Controller zu sehen, aber wenn Sie sich auf die Grundlagen von MVC konzentrieren, werden viele Ihrer Probleme aussortiert. Es tut mir leid, dass diese Antwort nicht sehr spezifisch ist, aber wenn Sie Ihre Frage überarbeiten, kann ich genauer sein.