2015-04-12 2 views
0

Я пытаюсь опубликовать как список строк, так и Guid от некоторых angularjs до моего контроллера. Я успешно создал решение, в котором я могу опубликовать список для контроллера, но я не могу понять, как добавить guid ($ scope.CategoryId). Я пробовал много разных настроек, но большую часть времени, если я изменяю что-либо, что он никогда не достигает метода в контроллере, когда я нажимаю кнопку. Вся помощь очень ценится!Разбор списка и Guid в json от углового до контроллера

Мое мнение:

<form> 
    <textarea class="form-control auto-input-field" rows="10" cols="80" id="autoGenerateInputField" ng-model="fighterList" ng-list="/\n/" /> 
    <input class="btn btn-primary" type="submit" ng-click="GenerateTournamentTree()" value="Generer kamptræ" /> 
</form> 

Мой angularj:

$scope.GenerateTournamentTree = function(){ 
    var stringOfFighters = new Array(); 
    var categoryId = $scope.CategoryId; 
    stringOfFighters = $scope.fighterList; 
    var postData = { fighters: stringOfFighters }; 

    $.ajax({ 
     type: "POST", 
     url: "/Api/Match/GenerateTournamentTree", 
     contentType: 'application/json; charset=utf-8', 
     data: JSON.stringify(stringOfFighters), 
     success: function (data) { 
      alert(data.Result); 
     }, 
     dataType: "json", 
     traditional: true 
    }); 
} 

Мой контроллер:

[Route("api/Match/GenerateTournamentTree")] 
    public IHttpActionResult GenerateTournamentTree(List<String> fighters) 
    { 
     fighters.Shuffle(); 
     var nodeTree = InsertNode(new TreeNode(), fighters); 
     var matches = new List<MatchRecord>(); 
     GenerateMatch(matches, nodeTree); 
     foreach(var match in matches) 
     { 
      match.CategoryId = new Guid("425d750e-56bd-412c-8a48-38c2fbe5b24c"); 
      match.EventId = 18; 
     } 
     db.Matches.AddRange(matches); 
     try 
     { 
      db.SaveChanges(); 
     } 
     catch (DbUpdateException) 
     {    
      throw;    
     } 
     return Json(new { Result = fighters }); 
    } 

ответ

1

Вы должны создайте модель, которую метод GenerateTournamentTree принимает как параметр. Модель будет содержать свойства «бойцов» и «categoryId» для сопоставления с переданными данными.

В вашем проекте, где находится контроллер, должна быть папка с именем «Модели». Создайте новый класс с именем TournamentBindingModel. Класс должен держать свойство, которые вы ожидаете -> истребителей и CategoryId

public class TournamentBindingModel 
    { 
     public List<string> Fighters { get; set; } 

     public string CategoryId { get; set; } 
    } 

После этого вы можете изменить подпись вашего метода контроллера к

public IHttpActionResult GenerateTournamentTree(TournamentBindingModel model) 
    { 
     ... 
    } 

свойства модели должны быть сопоставлены с помощью данных, которые передаются из запроса, и вы должны иметь к ним доступ, как model.Fighters и model.CategoryId (проанализируйте строку categoryId для guid).

+0

Должен признать, что я совсем новый. Можете ли вы привести пример, пожалуйста? –

+0

Я обновил свой ответ. :) –

+0

Большое спасибо Мартину. У меня есть намного лучшее представление о том, как исправить это сейчас. :) –