Ich bin neu in Angular JS und stecken für lange Zeit auf ein bestimmtes Problem.Model nicht mit JSON Daten
Für eine UI-Grid-Zeile wäre ein Spaltenwert in linkcelltemplate
. Und beim Klicken öffnet sich ein Bootstrap-Modal-Popup mit einem case quick search functionality
. Hier
ist das Stück Code:
<div ng-controller="CaseSearchCtrl">
<div ng-show="case.togglePleaseWait">
<div class="refresh" style="padding:15px;width:100%;height:100px;">
<h4>Please wait....</h4>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading text-center">
Case Search
</div>
<table class="table table-striped">
<tr>
<td>
<select name="selSearchType" id="selSearchType" class="form-control" ng-model="case.searchTerm"
ng-init="case.searchTerm == 'caseNo'" ng-options="o as o for o in case.searchTerms"></select>
</td>
<td><input type="text" class="form-control" placeholder="enter search term" ng-model="case.input" /></td>
<td><button class="btn btn-default" type="button" ng-click="case.quickSearch()">Quick Search</button></td>
</tr>
</table>
</div>
</div>
Und im Texteingabefeld können wir einen Wert eingeben und eine schnelle Suche.
Hier ist mein Controller Stück Code:
TransactionModule.controller("CaseSearchCtrl", ['$scope', '$uibModal', 'TransactionServices', 'CaseServices', 'CaseDataServices', 'TransactionDataServices', function ($scope, $uibModal, TransactionServices, CaseServices, CaseDataServices,TransactionDataServices) {
/* Case implementation starts*/
$scope.case = {
searchTerm: "caseNo",
searchTerms: caseSearchTerms(),
toggleQuickSearch: true,
togglePleaseWait: false,
name: "",
number: "",
type: "",
constName: "",
userName: "",
status: "",
}
$scope.case.quickSearch = function() {
$scope.case.togglePleaseWait = true;
console.log($scope.case.input);
if ($scope.case.searchTerm == "caseNo") {
$scope.case.number = $scope.case.input;
}
else if ($scope.case.searchTerm == "caseName") {
$scope.case.name = $scope.case.input;
}
else if ($scope.case.searchTerm == "constituentName") {
$scope.case.constName = $scope.case.input;
}
else if ($scope.case.searchTerm == "userName") {
$scope.case.userName = $scope.case.input;
}
else if ($scope.case.searchTerm == "status") {
$scope.case.status = $scope.case.input;
}
else if ($scope.case.searchTerm == "type") {
$scope.case.type = $scope.case.input;
}
var postParams = [
{
"CaseId": $scope.case.number,
"CaseName": $scope.case.name,
"ReferenceSource" : "",
"ReferenceId" : "",
"CaseType": $scope.case.type,
"CaseStatus": $scope.case.status,
"ConstituentName": $scope.case.constName,
"UserName": $scope.case.userName,
"ReportedDateFrom" : "",
"ReportedDateTo" : "",
"UserId": $scope.case.userName
}]
console.log("Post params are");
console.log(postParams);
CaseServices.getCaseAdvSearchResults(postParams).then(function (result) {
if (result.length > 0) {
$scope.case.togglePleaseWait = false;
//constMultiDataService.setData(result, HOME_CONSTANTS.QUICK_CASE_SEARCH);
console.log("Setting results for Quick search in TransactionDataServices");
console.log(result);
} ..........................
Aber hier ist die CaseInputSearchModel
während von der Steuerung zum Web-Service vorbei ist immer NULL
. Aber in der Konsole kann ich sehen, dass die Liste übergeben wird.
getCaseAdvSearchResults: function (postCaseSearchParams) {
console.log("Before sending to controller");
console.log(postCaseSearchParams);
return $http.post(BasePath + "CaseNative/AdvSearch", postCaseSearchParams, {
// return $http.post(BasePath + "Home/WriteCaseRecentSearches", postCaseSearchParams, {
headers: {
"Content-Type": "application/json",
"Accept": "application/json"
}
}).then(function (result) {
$http.post(BasePath + "Home/WriteCaseRecentSearches", postCaseSearchParams, {
headers: {
"Content-Type": "application/json",
"Accept": "application/json"
}
});
console.log(result);
return result.data;
});
},
Auch wenn die Parameter richtig in der Konsole angemeldet sind.
Hier ist, wie das Modell, an dem ich die Daten will Aussehen gebunden sein wie:
public class CaseInputSearchModel
{
public string CaseId { get; set; }
public string CaseName { get; set; }
public string ReferenceSource { get; set; }
public string ReferenceId { get; set; }
public string CaseType { get; set; }
public string CaseStatus { get; set; }
public string ConstituentName { get; set; }
public string UserName { get; set; }
public string ReportedDateFrom { get; set; }
public string ReportedDateTo { get; set; }
public string UserId { get; set; }
}
Können Sie zeigen, wie Sie die Ergebnisse zurück in das Modell abzubilden? Ich sehe, dass Sie in der Anfrage CamelCase manuell zu PascalCase zuordnen. Vielleicht möchten Sie einfach das JSON.Net CamelCasePropertyNamesContractResolver() verwenden – Martin
Könnten Sie die Registerkarte "Netzwerk" in der Chrome-Konsole öffnen und prüfen, ob die Payload der Postanforderung tatsächlich das enthält, was Sie erwarten? – noppa