我試圖做在MVC應用程序使用jQuery後,根據這個蘇答案在這裏: Can jQuery do a POST of a ViewModel to a Controller in ASP.NET MVC?傳遞ViewModel與jQuery後?
的區別是我使用它在動態視圖中刪除一個項目(心中永遠的事實我直接發佈刪除,這是一個通過授權的封閉網站,我將使用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。我不知道該怎麼做,所以任何幫助將不勝感激!
編輯: 對不起,返回值應該現在改變,不返回視圖()。
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)。但問題是,從動作方法返回此部分視圖並將其加載到div與jQuery後,$(「。delete」)。單擊jQuery功能不再工作了...
任何想法爲什麼?
好吧,但是如何在action方法中同時獲得id和ViewModel呢?在你的例子中,action方法中的參數應該達到這兩個參數? – Anders 2011-03-23 18:03:04
@Anders Svensson,你不需要修改你的動作方法簽名。使用此代碼,您應該同時在操作中綁定id和視圖模型。只要確保在視圖模型上沒有名爲id的屬性,或者您可能會得到奇怪的結果。 – 2011-03-23 18:03:55
好吧,我儘量按照你的說法嘗試,但它仍然沒有達到操作方法,並且只通過發送表單作爲參數,在這種情況下簽名不會錯誤嗎?而且我仍然不明白該方法是如何訪問該ID的,因爲我將它放在了hiddenid輸入中? – Anders 2011-03-23 18:13:16