我有一个包含动态交易数量的导入页面。对于每个事务,我有几个纯文本数据标签和一个DropDownList(Categories)。我试图通过将Categories Model作为additionalViewData传递给我的EditorTemplate来使用来自我的ViewModel(Category
)的数据填充此Categories
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>
答案 0 :(得分:2)
您可以将类别作为additionalViewData提供给编辑器,例如
@Html.EditorFor(m => m.AbnAmroTransactions, {Categories = Model.Categories});
但请注意其含义,即在使用该编辑器的任何地方都必须这样做。
使用编辑器可能会更好,您可以将类别与模型表达式一起传递
答案 1 :(得分:0)
它的类型不是太强,但在您的控制器中,您可以填充类别列表并将其放在ViewBag中。然后你可以在你可能拥有的每个交易中使用它,它只存储在内存中一次。
如果您将类别集合放在列表中的每个交易中,您可以多次使用它。