2011-03-24 22 views
1

我是弗朗西斯,我是新手。關於View和Controller之間發佈的數據,ASP.NET MVC3有問題。我的目標是使用表單來編輯我的數據庫中的特定記錄,然後將其發送回控制器,控制器負責檢查記錄的字段並將它們提交到數據庫中。 通過使用ViewModel將數據從Controller傳遞到View,因此DefaultDataBinding不適用於這種情況。我嘗試了很多方法,我監控了與Fiddler的溝通,但我無法解決我的問題。 Phil Haack描述的方法不起作用,FormCollection也不起作用。通行證嵌套列表來控制使用的ViewModels

這裏有代碼:

的ViewModels:我把它傳遞給視圖中創建一個表。只需顯示名稱和項目名稱(表格列標題)列表。我想返回Id,Month(它們作爲參數正確傳遞並表示表格行標題),最重要的是Items和它們的Id的ActualValue(我的數據庫中有一個關聯表,其中Id,Itemid和Month分別爲鍵)

public class EditViewModel 
{ 
    [ScaffoldColumn(false)] 
    public int Id { get; set; } 

    [ScaffoldColumn(false)] 
    public int Month { get; set; } 

    public string Name { get; set; } 

    public List<ItemViewModel> ItemList { get; set; } 
} 

public class ItemViewModel 
{ 
    [ScaffoldColumn(false)] 
    public int ItemId { get; set; } 

    public string ItemName { get; set; } 

    public float ActualValue { get; set; } 
} 

查看:視圖強類型爲ViewModels.EditViewModel並通過提交按鈕發送字段。我必須使用的foreach循環生成的表,因爲我不知道有多少項目有提前

控制器:控制器有更新來自與特定標識和月視圖通過每個KPI。

  [HttpPost] 
    public ActionResult EditMonth(int Id, int Month, //FormCollection kpiValues) 

我希望我很清楚,我期待着有一些幫助。非常感謝!

+0

請告訴我你的問題? – Landern 2011-03-24 15:42:32

+0

對不起,摩西,我是新來的,我必須改進我發佈問題的方式。我的問題是「如何將具有未知數量的元素的嵌套列表(在另一個列表中)從強類型View傳遞給Controller?」 – CiccioMiami 2011-03-25 08:04:23

回答

1

這裏有一個猜測:你的控制器方法(EditMonth)正在尋找一個名爲Id和月兩個參數。默認情況下,這些是綁定器在請求中查找的名稱,當用戶單擊提交按鈕時,該名稱將被髮送回服務器。

不過,我懷疑所呈現的頁面上的屬性被命名爲類似EditViewModel_Id和EditViewModel_Month。所以活頁夾將無法匹配它們。

您可以覆蓋粘合劑的默認操作。但我認爲,一個更簡單的方法是重新定義EditMonth方法,以便它預計的EditViewModel對象:

[HttpPost] 
public ActionResult EditMonth(EditViewModel model) 
{... 

名稱應該再搭配起來(你要檢查ModelState.IsValid,當然要確保該聯編程序沒有遇到設置EditViewModel對象的問題)。

BTW,這東西我發現有用的是看在瀏覽器中呈現的頁面的源代碼。然後,您可以看到活頁夾將查找的確切名稱匹配(它們是HTML元素中的name = ...屬性)。

+0

親愛的馬克,謝謝你的回覆。參數Id和月份可以通過[HttpPost] EditMonth操作方法正確查看。那些根本沒有被action方法看到的是List ItemList。我還嘗試創建一個與EditViewModel相同的後置模型,除了Name屬性(我只需要它在View中顯示名稱)。我想這個活頁夾的問題是當它必須在視圖模型中填充一個neste列表時... – CiccioMiami 2011-03-27 15:59:23

+0

請問您可以發佈您的視圖代碼。 – JayneT 2011-04-01 14:30:18