나는에 따른, MVC 응용 프로그램에서 jQuery로 게시물을 할 노력하고있어이 그래서 여기에 답 Can jQuery do a POST of a ViewModel to a Controller in ASP.NET MVC?jQuery 게시물이있는 ViewModel을 전달 하시겠습니까?
차이가 나는 (사실을 신경 쓰지 동적 뷰에서 항목을 삭제하는 데 사용하고있다내가 직접 삭제를 게시하고, 이것은 승인에 의해 닫힌 사이트이며, jQuery를 사용하여 확인합니다. 사용자가 새 페이지로 이동하지 못하도록하고 싶습니다.) 따라서 ID와 ViewModel (삭제하기 전에 추가 된 항목을 저장하는 ViewModel)을 모두 보낼 수 있어야합니다. 나는 그 해결책에 대해별로 행복하지 않다. 그러나이 시점에서 나는 그것을 작동시킬 필요가있다!
그래서 위의 SO 게시물에 따라 id와 ViewModel을 보내는 방법을 알아 내려고했지만 명명 된 매개 변수로 ViewModel을 가져 오는 방법을 알아낼 수 없습니다. 이 작동하지 않습니다
$(".delete").click(function() {
$.ajax({
type: "POST",
url: deleteurl,
data: ({id : $(this).closest('tr').find('td:first').text(),vm: $('form').serialize()}),
cache: false,
success: function (html) {
$("#rows").html(html);
}
});
return false;
});
다음은 POST 액션 메소드입니다 :
[HttpPost]
public ActionResult Delete(int id, LanguageViewModel vm)
{
for (int i = 0; i < vm.Languages.Count; i++)
{
var language = _repository.GetLanguage(vm.Languages[i].Id); //This is the key, get the original program object to update
UpdateModel(language, "Languages[" + i + "]");
}
_repository.Save();
//Delete code will go here
return RedirectToAction("Edit", "Languages", new { id = id });
//return View();
}
다시, 작동하지 않는, 심지어는 디버거의 동작 방법에 도착하지 않습니다. 액션 메소드에서 int id 매개 변수를 제거하면 실제로 거기에 도착하지만 vm = null이됩니다. 나는 무엇을해야할지 아무런 단서가 없으므로 어떤 도움이라도 대단히 감사하겠습니다!
편집 : 죄송합니다. 반환 값은 현재 변경된 상태 여야하며 View()를 반환하지 않아야합니다.
UPDATE
:[HttpPost]
public ActionResult Delete(LanguageViewModel vm, FormCollection collection)
{
for (int i = 0; i < vm.Languages.Count; i++)
{
var language = _repository.GetLanguage(vm.Languages[i].Id); //This is the key, get the original program object to update
UpdateModel(language, "Languages[" + i + "]");
}
_repository.Save();
int id = Int32.Parse(collection["HiddenId"]);
Language languageToDelete = _repository.GetLanguage(id);
_repository.Delete(languageToDelete);
vm.Languages.Remove(vm.Languages.SingleOrDefault(l => l.Id == id));
_repository.Save();
return PartialView("LanguageList", vm);
}
하지만 그 때문에 나는 처음부터 어떻게해야 무슨이었다 PartialView를 (반환하도록 변경되었습니다 대린 그것에서 약간의 도움으로
거의 일하고있어 jQuery가 수행하는 작업 - 결과로 div를로드). 하지만이 부분 뷰를 작업 메서드에서 반환하고 jQuery로 div에로드 한 후 $ (". delete") 클릭 jQuery 함수가 더 이상 작동하지 않습니다.
?
하지만 어떻게 동작 방법에서 id와 ViewModel을 모두 얻을 수 있습니까? 액션 메소드의 매개 변수가이 두 가지를 모두 얻으려면 어떻게해야합니까? – Anders
@Anders Svensson, 당신은 당신의 행동 방식 서명을 수정할 필요가 없습니다. 이 코드를 사용하면 액션에 바인딩 된 ID와 뷰 모델을 모두 가져와야합니다. 보기 모델에 ID라는 속성이 없으면 이상한 결과가 발생할 수 있습니다. –
그래, 내가 말한대로 정확하게 시도했지만, 여전히 액션 메소드에 도달하지 못했고, 매개 변수로만 폼을 보내면이 경우 서명이 잘못되지 않겠는가? 그리고 나는 숨겨진 입력에 넣었 기 때문에이 메소드가 이드에 어떻게 액세스 할 수 있는지 이해하지 못한다. – Anders