2010-12-09 70 views
0

我有一個時間表應用程序,其中一個視圖包含由jQuery加載的PartialView。主視圖和部分視圖用不同的模型類型強制類型化。在MVC 2應用程序中的PartialView中傳遞模型?

一切工作正常加載數據。來自每個相應模型的數據將被加載到主視圖(包含所有客戶和任務的下拉列表)和PartialView(特定創建的任務,其中輸入字段記錄了幾個小時)。

但是,需要提交PartialView(包含表單),以便其模型可以更新數據庫。通常,MVC綁定的簡單性應該是模型的屬性綁定到視圖中的字段,並且您可以提交然後保存該模型。但它在這裏不起作用。首先,我需要通過jQuery提交部分視圖,就像我需要以這種方式獲取數據一樣。因爲如果我只是使用提交輸入字段,則PartialView是唯一返回的東西(它會在返回時佔用整個頁面)。所以我這樣做:

在點擊savehours按鈕:

 $('#savehours').click(function (event) { 
      alert('Test'); 
      var form = $('#hoursForm'); 
      var actionUrl = '<%= Url.Action("GetTasks", "Timesheet") %>'; 
      $.ajax({ 
       type: "POST", 
       url: actionUrl, 
       data: form.serialize(), 
       error: function (xhr, status, error) { 
        //do something about the error 
       }, 
       success: function (data) { 
        $('#tasksDiv').html(data); 

       } 
      }); 
     }); 

和Controller:

[HttpPost] 
    public ActionResult GetTasks(TasksViewModel tasksViewModel) 
    { 
     string test = tasksViewModel.Tasks.FirstOrDefault().ToString(); //Test for debugging... 
     //Doesn't seem to work, I don't get the model back... 
     _model.Save(); 
     return PartialView(GetTaskModel()); 
    } 

由於我的言論表明,我用一個簡單的字符串進行測試,看我有訪問綁定到PartialView中的字段的模型,但我沒有。

我現在想我可能會嘗試使用ViewData而不是將模型傳遞給View,然後將字段綁定到ViewData。我不知道這是否會更好,但這是我目前唯一的想法。或者我在這裏做錯了什麼?應該可以做我一直在做的事情,只有我做錯了嗎?

回答

0

我假設你使用的是實體框架。但是我沒有看到你的控制器動作有任何改變。嘗試修改代碼,如:

[HttpPost] 
public ActionResult GetTasks(TasksViewModel tasksViewModel) 
{ 
    string test = tasksViewModel.Tasks.FirstOrDefault().ToString(); 
    //Doesn't seem to work, I don't get the model back... 

    Tasks tasks = _model.Tasks.FirstOrDefault(s => s.ID.Equals(id)); //where id is the row id 
    UpdateModel(tasks,taskViewModel); //where Tasks is your table 
    _model.SaveChanges(); 
    return PartialView(GetTaskModel()); 
} 
+0

不起作用。它甚至不會超過字符串測試的第一部分,因爲Tasks.FirstOrDefault爲null ...這是我不明白的地方。當我使用GetTasks httpget方法加載PartialView中的輸入字段時,它會加載正常,所以模型顯然在該階段沒問題。但是當我通過jQuery提交post方法時,返回的模型似乎不包含任何任務。 – Anders 2010-12-09 13:10:57

相關問題