C# &引用;没有类型为';IEnumerable<;选择列表项>'&引用;自定义模型和列表出错
我在视图中有一个下拉列表:C# &引用;没有类型为';IEnumerable<;选择列表项>'&引用;自定义模型和列表出错,c#,asp.net-mvc,C#,Asp.net Mvc,我在视图中有一个下拉列表: @Html.DropDownList("Sale.TypeTransaction", ViewBag.typetransaction as SelectList, new { @class = "form-control" }) 如您所见,dropdownlist的名称为Sale.TypeTransaction,因为Sale是自定义模型中的一个模型: public class OfficeSale { public OfficeSale() {
@Html.DropDownList("Sale.TypeTransaction", ViewBag.typetransaction as SelectList, new { @class = "form-control" })
如您所见,dropdownlist的名称为Sale.TypeTransaction
,因为Sale
是自定义模型中的一个模型:
public class OfficeSale
{
public OfficeSale()
{
SaleProductRelations = new List<SaleProductRelation>();
Sale = new Sale();
}
public Sale Sale { get; set; }
public List<SaleProductRelation> SaleProductRelations { get; set; }
}
我知道如果我的viewbag与我的属性名称相同,则会填充dropdownlist。但是我不能写ViewBag.sale.typetransaction
。你有办法解决这个问题吗?提前谢谢
好的,我按照@StephenMuecke的建议尝试了以下方法,效果很好:
public ActionResult NewSale()
{
var list = new List<string>();
list.Add("Cash");
list.Add("Credit");
list.Add("Promotion");
ViewBag.typetransaction = new SelectList(list);
return View(new OfficeSale());
}
@Html.DropDownList("Sale.TypeTransaction", ViewBag.typetransaction as SelectList, new { @class = "form-control" })
public ActionResult NewSale()
{
var list=新列表();
列表。添加(“现金”);
列表。添加(“信用”);
列表。添加(“促销”);
ViewBag.typetransaction=新建选择列表(列表);
返回视图(newofficesale());
}
@Html.DropDownList(“Sale.TypeTransaction”,ViewBag.TypeTransaction作为SelectList,新建{@class=“form control”})
ViewBag.typetransaction as SelectList
这让我很烦恼
由于
DropDownList
帮助程序希望第二个参数是IEnumerable
(我相信您正在调用此构造函数),您可能需要转换为IEnumerable
。ViewBag.typetransaction As SelectList
这让我非常困扰
由于
DropDownList
帮助程序希望第二个参数是IEnumerable
(我相信您正在调用此构造函数)您可能需要强制转换为IEnumerable
。您的问题是,在控制器中,您将ViewBag.typetransaction
分配给typeofIEnumerable
,但在视图中,您尝试将其强制转换为typeofSelectList
,结果是ViewBag.typetransaction
为null
SelectList
是IEnumerable
(SelectList
派生自MultiSelectList
,后者派生自IEnumerable
),但IEnumerable
不是SelectList
有两个选项可以解决这个问题。首先,在视图中,将ViewBag
属性强制转换为html帮助程序中的正确类型
@Html.DropDownList("Sale.TypeTransaction", ViewBag.typetransaction as IEnumerable<SelectListItem>, new { @class = "form-control" })
您的问题是,在控制器中将
ViewBag.typetransaction
分配给typeofIEnumerable
,然后在视图中尝试将其强制转换为typeofSelectList
,结果是ViewBag.typetransaction
为null
SelectList
是IEnumerable
(SelectList
派生自MultiSelectList
,后者派生自IEnumerable
),但IEnumerable
不是SelectList
有两个选项可以解决这个问题。首先,在视图中,将ViewBag
属性强制转换为html帮助程序中的正确类型
@Html.DropDownList("Sale.TypeTransaction", ViewBag.typetransaction as IEnumerable<SelectListItem>, new { @class = "form-control" })
困扰我的是,dropdownlist的第二个参数应该是IEnumerable,但是您显式地将其转换为一个我认为没有实现IEnumerable的具体对象。为什么?嗯,它在其他“普通”下拉列表上工作,这是因为我正在创建一个自定义选项列表。您尝试调用哪个助手的构造函数?您不应该将
SelectList
命名为与您尝试绑定到的模型属性相同的名称,因此,将其命名为ViewBag.sale.typetransaction
完全是错误的做法。您需要显示收到的错误消息的确切详细信息,但错误是因为ViewBag.typetransaction
为null
。它需要是ViewBag.typetransaction as IEnumerable
,或者如果在发布时发生错误,则是因为您没有重新分配ViewBag.typetransaction的值。我在get中输入页面时出现此错误。问题是dropdownlist的名称,如果它是TypeTransaction
,它会工作得很好,但是它不会绑定控制器中的模型。困扰我的是,dropdownlist的第二个参数应该是IEnumerable,但是你显式地将它转换为一个我认为没有实现IEnumerable的具体对象。为什么?嗯,它在其他“普通”下拉列表上工作,这是因为我正在创建一个自定义选项列表。您尝试调用哪个助手的构造函数?您不应该将SelectList
命名为与您尝试绑定到的模型属性相同的名称,因此,将其命名为ViewBag.sale.typetransaction
完全是错误的做法。您需要显示收到的错误消息的确切详细信息,但错误是因为ViewBag.typetransaction
为null
。它需要是ViewBag.typetransaction as IEnumerable
,或者如果在发布时发生错误,则是因为您没有重新分配ViewBag.typetransaction的值。我在get中输入页面时出现此错误。问题是dropdownlist的名称,如果它是TypeTransaction
,它会工作得很好,但是它不会绑定控制器中的模型。困扰我的是,dropdownlist的第二个参数应该是IEnumerable,但是你显式地将它转换为一个我认为没有实现IEnumerable的具体对象。为什么?嗯,它在其他“普通”下拉列表上工作,这是因为我正在创建一个自定义选项列表。您尝试调用哪个助手的构造函数?您不应该将SelectList
命名为与您尝试绑定到的模型属性相同的名称,因此,将其命名为ViewBag.sale.typetransaction
完全是错误的做法。您需要显示收到的错误消息的确切详细信息,但错误是因为ViewBag.typetransaction
为null
。它需要是ViewBag.typetransaction as IEnumerable
,或者如果在发布时发生错误,则是因为您没有重新分配val
ViewBag.typetransaction = new SelectList(new List<string>() { "Cash", "Credit", "Promotion" });