gpt4 book ai didi

c# - 带有下拉列表和 SelectListItem 辅助的 Asp.Net MVC

转载 作者:可可西里 更新时间:2023-11-01 07:49:32 26 4
gpt4 key购买 nike

我正在尝试构建一个下拉列表,但正在与 Html.DropDownList 渲染作斗争。

我有一个类:

public class AccountTransactionView
{
public IEnumerable<SelectListItem> Accounts { get; set; }
public int SelectedAccountId { get; set; }
}

这基本上就是我目前的 View 模型。帐户列表,以及用于返回所选项目的属性。

在我的 Controller 中,我像这样准备好数据:

public ActionResult AccountTransaction(AccountTransactionView model)
{
List<AccountDto> accounts = Services.AccountServices.GetAccounts(false);

AccountTransactionView v = new AccountTransactionView
{
Accounts = (from a in accounts
select new SelectListItem
{
Text = a.Description,
Value = a.AccountId.ToString(),
Selected = false
}),
};

return View(model);
}

现在的问题:

然后我尝试在我的 View 中构建下拉列表:

<%=Html.DropDownList("SelectedAccountId", Model.Accounts) %>

我收到以下错误:

具有键“SelectedAccountId”的 ViewData 项目是“System.Int32”类型,但必须是“IEnumerable”类型。

为什么要我返回整个项目列表?我只想要选定的值。我应该怎么做?

最佳答案

你有一个 View 模型,你的 View 是强类型的 => 使用强类型的助手:

<%= Html.DropDownListFor(
x => x.SelectedAccountId,
new SelectList(Model.Accounts, "Value", "Text")
) %>

另请注意,我对第二个参数使用了 SelectList

并且在您的 Controller 操作中,您返回的是作为参数传递的 View 模型,而不是您在操作中构建的 View 模型,该操作正确设置了 Accounts 属性,因此这可能会出现问题。我已经清理了一下:

public ActionResult AccountTransaction()
{
var accounts = Services.AccountServices.GetAccounts(false);
var viewModel = new AccountTransactionView
{
Accounts = accounts.Select(a => new SelectListItem
{
Text = a.Description,
Value = a.AccountId.ToString()
})
};
return View(viewModel);
}

关于c# - 带有下拉列表和 SelectListItem 辅助的 Asp.Net MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4833652/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com