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:
- Wie funktioniert Erfolg der Arbeit, wenn Sie einen Parameter an die Steuerung zu senden?
- Der C# -Parameter ist null.
- 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);
}
Gefällt Ihnen dieses Versuchen Sie versuchen, neue js wie var Objekt mit obj = {}; obj.personId = "1"; und dann als Daten übergeben – rashfmnb
@rashfmnb Ich bin neu in js so könnten Sie auf diese erweitern? – ChaseHardin
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