2016-04-12 12 views
1

Hier ist das Szenario:Parameter in Controller-Null Nachdem Ajax-Aufruf

Wenn ein Benutzer die Details Schaltfläche auswählt, die JavaScript-Funktion, getPersonId packt die PersonId wie erwartet.

Wo das Problem auftritt:

Nach dem personId Auswahl sende ich, dass Id in einen ajax Anruf. Die Id bekommen ist bestanden, aber laufen auf Probleme: was sollte mein Erfolg sein? und die PersonId an die Steuerung übergeben zu werden, ist

Liste der Probleme null:

  1. Wie funktioniert Erfolg der Arbeit, wenn Sie einen Parameter an die Steuerung zu senden?
  2. Der C# -Parameter ist null.
  3. Wie heißt die Ajax-Methode? Soll dies auf dem Detail-Button aufgerufen werden?

Html

<div class="col-md-12"> 
    <table class="table table-striped"> 
     <thead> 
      <tr> 
       <th>Name</th> 
       <th>Age</th> 
       <th>Details</th> 
      </tr> 
     </thead> 
     <tbody> 
      @foreach (var viewModel in Model) 
      { 
       <tr> 
        <td>@viewModel.Name</td> 
        <td>@viewModel.Age</td> 
        <td><button data-id="@viewModel.PersonId" type="button" data-bind="click: getPersonId" class="btn btn-success" data-toggle="modal" data-target="#details-modal"><span class="fa fa-external-link-square"></span> Details</button></td> 
       </tr> 
      } 
     </tbody> 
</table> 
</div> 

Erstellen PersonViewModel Instanz am Ende der HTML

<script> 
     $(function() { 
      window.viewModel = new PersonViewModel().init(@Html.Json(Model)); 
     }); 
</script> 

JavaScript

function PersonViewModel() { 
    var self = this; 

    self.init = function(data) { 
     ko.mapping.fromJS(data, {}, self); 
     ko.applyBindings(self, $("#tblPerson")[0]); 

     return self; 
    } 

    self.getPersonId = function(vm, ev) { 
     var personId = $(ev.target).data('id'); 
     return personId; 
    } 

    self.getPersonEntity = function() { 
     $.ajax({ 
      type: "POST", 
      url: '/Person/RetrievePersonEntity', 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      data: ko.toJSON(self.getPersonId), 
      success: function() {} // not sure what I need here... 
     }); 
    } 
} 

C#-Controller

[HttpPost] 
public JsonResult RetrievePersonEntity(string personId) 
{ 
    var result = _personOrchestrator.RetrievePersonEntity(personId); 

    return Json(result); 
} 
+0

Gefällt Ihnen dieses Versuchen Sie versuchen, neue js wie var Objekt mit obj = {}; obj.personId = "1"; und dann als Daten übergeben – rashfmnb

+0

@rashfmnb Ich bin neu in js so könnten Sie auf diese erweitern? – ChaseHardin

+0

Ich meine zu sagen, anstatt ko.toJSON (self.getPersonId) zu senden, erstellen Sie eine neue Objektinstanz wie var newobj = {}; obj.personId = self.getPersonId; und dann Daten senden: ko.toJSON (newobj) – rashfmnb

Antwort

2

Try this:

self.getPersonEntity = function() { 
     $.ajax({ 
      type: "POST", 
      url: '/Person/RetrievePersonEntity?personId=' + self.getPersonId(vm, ev), 
      data: ko.toJSON(self.getPersonId), 
      success: function() { 
       return self.getPersonId 
      } 
     }); 
    } 
0

Sie können

self.getPersonEntity = function() { 
    $.ajax({ 
     type: "POST", 
     url: '/Person/RetrievePersonEntity' , 
     data: {personId:self.getPersonId(vm, ev)}, 
     success: function() { 
      return self.getPersonId 
     } 
    }); 
} 
Verwandte Themen