2012-05-20 93 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集合放入列表中的每个事务中,您可以多次使用它。