【问题标题】:XML to dropdown list using LINQXML 到使用 LINQ 的下拉列表
【发布时间】:2014-03-12 14:31:48
【问题描述】:

下面的代码在没有这一行的情况下完美运行:“.Insert(0, new SelectListItem(){Text = "", Value="", Selected = false})"...基本上我想添加一个空白下拉列表的值,我得到的错误是“无法从 void 转换为 SelectListItem。”关于如何正确添加空白的任何想法?

@Html.DropDownListFor(model => model.itemPost.txtVal,
    new List<SelectListItem>(
        (from node in
             System.Xml.Linq.XDocument.Parse(Model.itemQuestionRowDef.SupportingXML).Descendants("option")
         select new SelectListItem
             {
                 Text = node.Value,
                 Value = node.Attribute("value").Value,
                 Selected = node.Attribute("value").Value == Model.itemPost.txtVal ? true : false
             }
         )
        ).Insert(0, new SelectListItem(){Text = "", Value="", Selected = false}),
    new { @class = "tobeFilled", id = "id_" + Model.counter, Name = "questionLst[" + Model.counter + "]." + "txtVal" })

【问题讨论】:

    标签: c# asp.net-mvc linq


    【解决方案1】:

    正如错误试图告诉您的那样,List&lt;T&gt;.Insert() 不会返回任何内容,因此您不能在表达式中使用它。

    相反,您可以调用 LINQ 的 Concat() 方法,该方法返回一个新序列:

    new[] { new SelectListItem(...) }
    .Concat(from node in ...
            select ...
    )
    

    【讨论】:

    • 是否可以将此新项目添加为列表中的第一个?
    • @RealityDysfunction:这就是我的(编辑的)代码所做的
    • 这里的所有解决方案都有效,但第一个解决方案占了上风。感谢 SLaks 的帮助。
    【解决方案2】:

    Insert 的返回类型是void。它确实会修改您的列表。所以您需要创建和修改您的列表。然后将其传递给函数:

    var list = new List<SelectListItem>(
        (from node in   System.Xml.Linq.XDocument.Parse(Model.itemQuestionRowDef.SupportingXML).Descendants("option")
         select new SelectListItem
             {
                 Text = node.Value,
                 Value = node.Attribute("value").Value,
                 Selected = node.Attribute("value").Value == Model.itemPost.txtVal ? true : false
             }));
    list.Insert(0, new SelectListItem(){Text = "", Value="", Selected = false});
    
    @Html.DropDownListFor(model => model.itemPost.txtVal,list,new { @class = "tobeFilled", id = "id_" + Model.counter, Name = "questionLst[" + Model.counter + "]." + "txtVal" });
    

    【讨论】:

      猜你喜欢
      • 2012-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多