【发布时间】:2011-03-23 17:02:56
【问题描述】:
我正在尝试在 MVC 应用程序中使用 jQuery 发布帖子,根据此处的 SO 答案: Can jQuery do a POST of a ViewModel to a Controller in ASP.NET MVC?
不同的是我用它来删除动态视图中的一个项目(不要介意我直接发布删除,这是一个授权关闭的站点,我将使用 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();
}
同样,它不起作用,它甚至没有到达调试器中的操作方法。如果我从 action 方法中删除 int id 参数,它实际上会到达那里,但是 vm = null。我不知道该怎么做,所以任何帮助将不胜感激!
编辑: 对不起,返回值现在应该是改变了,而不是返回 View()。
更新:
在达林的一点帮助下,它几乎可以工作了:
[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)。但问题是,在从 action 方法返回这个 Partial View 并使用 jQuery 将其加载到 div 中后,$(".delete").click jQuery 函数不再起作用......
有什么想法吗?
【问题讨论】:
标签: jquery asp.net asp.net-mvc-3 viewmodel