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
分配给typeof
IEnumerable
,但在视图中,您尝试将其强制转换为typeof
SelectList
,结果是
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
分配给typeof
IEnumerable
,然后在视图中尝试将其强制转换为typeof
SelectList
,结果是
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" });