2015-12-29 3 views
-1

Я отлаживал это, и контроллер возвращает данные в вызов $ .ajax по какой-то причине данные не возвращаются в функцию $ .ajax.

function UpdateItem() { 
var name = $("#UpdateInput").val(); 
var item = []; 
item = { Name: name, Key: updateKey }; 
if (item.Name != "--Select Item--" && item.Key != "--Select Item--") { 
    var url = "api/todo/" + item.Key; 
    $.ajax({ 
     url: url, 
     data: JSON.stringify(item), 
     async: false, 
     type: "PUT", 
     contentType: "application/json; charset=utf-8" 
    }) 
    .error(function (jqXHR, textStatus, errorThrown) { 
     alert(jqXHR + "-" + textStatus + "-" + errorThrown); 
    }) 
    .done(function() { 
     $("#UpdateInput").val(""); 
     UpdateItemRow(); 
    }) 
} 
} 

function UpdateItemRow() { 
var url = "api/todo/" + updateKey; 
$.ajax({ 
    url: url, 
    async: true, 
    type: 'GET', 
    contentType: "application/json; charset=utf-8", 
    success: function (data) { 
     alert(data.Name); 
     $("#KeyButton").val(data.Key); 
     $("#KeyLabel").html(data.Name); 
    } 
}) 
.error(function (jqXHR, textStatus, errorThrown) { 
    alert(jqXHR + "-" + textStatus + "-" + errorThrown); 
}) 
} 

Контроллер:

[HttpGet("{id}", Name = "GetTodo")] 
    public IActionResult GetById(string id) 
    { 
     var item = TodoItems.Find(id); 
     if (item == null) 
     { 
      return HttpNotFound(); 
     } 
     return new ObjectResult(item); 
    } 
+0

Извините, вы не можете использовать тот же контроллер для метода PUT и GET. У вас должно быть два разных действия. можете ли вы разместить свой контроллер с помощью метода PUT? –

+0

PUT и GET на одном и том же контроллере WebAPI работают отлично, но, похоже, какая-то проблема вызывает их одно за другим. – Mark

ответ

0

Я обнаружил, что установка кэша ложен в вызове $ .ajax работало

cache: false 

Я также с помощью Visual Studio 2015 Release Candidate и были ошибки, что изменение порта разрешенным. Таким образом, это могло быть ошибкой в ​​Visual Studio или IIS. Это неоднозначный ответ, но вы можете попробовать все предлагаемые решения, если столкнулись с этой проблемой. Извините, что не дал точного ответа.))

0

попытка удалить

[HttpGet("{id}", Name = "GetTodo")] 

от ваших действий и положить

[HttpGet] 
0

Вот PUT контроллер:

[HttpPut("{id}")] 
    public IActionResult Update(string id, [FromBody] TodoItem item) 
    { 
     if (item == null || item.Key != id) 
     { 
      return HttpBadRequest(); 
     } 

     var todo = TodoItems.Find(id); 
     if (todo == null) 
     { 
      return HttpNotFound(); 
     } 

     TodoItems.Update(item); 
     return new NoContentResult(); 
    } 
+0

GET просто не возвращает обновленные данные после PUT, пока браузер не обновится. Возможно ли, что вызов GET кэшируется? – Mark

Смежные вопросы