2012-05-20 127 views
0

我有一個包含動態事務數的導入頁面。對於每個交易,我有幾個純文本數據標籤和一個DropDownList(分類)。我試圖用我的ViewModel(Categories)中的數據填充這個Category DropDownList,將類別模型作爲additionalViewData傳遞給我的EditorTemplate。在EditorTemplate中填充數據庫DropDownList

當我使用下面的例子中,我得到以下錯誤EditorTemplate頁上: 編譯器錯誤消息:CS0411:類型參數爲方法「System.Web.Mvc.Html.SelectExtensions.DropDownListFor(System.Web程序。 Mvc.HtmlHelper,System.Linq.Expressions.Expression>,System.Collections.Generic.IEnumerable)'不能從使用情況中推斷出來。嘗試明確指定類型參數。

有關如何解決此問題的任何想法?

視圖模型:

public class ImportViewModel 
{ 
    public List<AbnAmroTransaction> AbnAmroTransactions { get; set; } 
    public IEnumerable<SelectListItem> Categories { get; set; } 
} 

型號:

public class AbnAmroTransaction 
{ 
    public string Currency { get; set; } 
    public int DateTime { get; set; } 
    public string Description { get; set; } 
    public int CategoryId { get; set; } 
} 

形式:

@using (Html.BeginForm("ImportPreview", "Home", FormMethod.Post)) 
{ 
    <table> 
    @Html.EditorFor(m => m.AbnAmroTransactions, new { Categories = Model.Categories }); 
    </table> 
    <input id="btnSave" type="submit" value="Save data" /> 
} 

EditorTemplate:

<tr> 
    <td style="width: 80px;"> 
     @Html.Raw(CurrencyHelper.GetHtmlCurrency(Model.Currency, Model.Amount)) 
    </td> 
    <td>@Model.DateTime</td> 
    <td>@Model.Description</td> 
    <td>@Html.DropDownListFor(Model.CategoryId, ViewData["Categories"])</td> 
</tr> 

回答

2

你可以提供的類別爲additionalViewData給編輯,像

@Html.EditorFor(m => m.AbnAmroTransactions, {Categories = Model.Categories}); 

但要注意的含義,那你要做的是無處不在,你使用編輯器。

這可能是更好地使用編輯器,您可以通過類別與型號表示

+0

感謝您的建議,嘗試過這一點,仍然有一個小問題。更新我的問題:) – Erwin1441

+1

ViewData中的對象不是強類型的,您必須將其強制轉換,以便編譯可以推斷其用法。 –

+0

嗨格奧爾格,我得到它使用這個工作: @ Html.DropDownListFor(m => m.CategoryId,新的SelectList(ViewData [「類別」] IEnumerable ,「CategoryId」,「名稱」 )) 非常感謝! – Erwin1441

0

現在還不算強類型一起,但在你的控制器,你可以填充類別列表,並將其放置在ViewBag 。然後,您可以在每個可能具有的事務中使用它,並將其僅存儲在內存中一次。

如果您將Categories集合放入列表中的每個事務中,您可以多次使用它。