【问题标题】:Multiselect list not showing selected items in c# mvc using linq2sql使用 linq2sql 的多选列表未在 c#mvc 中显示所选项目
【发布时间】:2010-01-18 19:53:43
【问题描述】:

我尝试了许多不同的方法将所选项目传递到多选列表,但没有成功。最后,我尝试了这个,我认为它应该显示所有已选择的项目,但列表中仍然没有选择任何内容。

public MultiSelectList Companies { get; private set; }

Companies = MulitSelectList(subcontractRepository.SubcontractCompanies(Subcontract.subcontract_id), "Value", "Text");

在 SubcontractRepository.cs 中:

public IEnumerable<SelectListItem> SubcontractCompanies(Guid id)
{
     return c in db.companies
     select new SelectListItem
     {
          Text = c.company_name,
          Value = c.company_id.ToString(),
          Selected = true
     }
}

在视图中:

<p>
    <label for="Companies">Company:</label>
    <%= Html.ListBox("Companies", Model.Companies) %>
    <%= Html.ValidationMessage("Companies", "*") %>
</p>

【问题讨论】:

  • 你使用的是什么版本的mvc?视图中的字段名称是否与 Model.FieldName 匹配?
  • 1.0 名称相同。我看到了列表,它只是没有选择任何东西。

标签: asp.net-mvc linq-to-sql multi-select selectlistitem


【解决方案1】:

在这里发现了问题。 MultiSelectList 的名称必须与 ListBox 不同。进行了更改,现在两个版本的代码都可以使用。

【讨论】:

    【解决方案2】:

    MultiSelectList 构造函数有第四个参数 - 选定项。使用它:

    http://msdn.microsoft.com/en-us/library/system.web.mvc.multiselectlist.multiselectlist.aspx

    使用此代码:

    public class SelectCompanyItem
    {
        public string Name { get; set; }
        public Guid Id { get; set; }
    }
    
    public IEnumerable<SelectCompanyItem> SubcontractCompanies(Guid id)
    {
         return c in db.companies
         select new SelectCompanyItem
         {
              Name = c.company_name,
              Id = c.company_id
         }
    }
    
    var companiesList = subcontractRepository.SubcontractCompanies(Subcontract.subcontract_id);
    Companies = new MultiSelectList(companiesList , "Id", "Name", companiesList.Select(a => a.Id));
    

    有效吗?

    【讨论】:

    • 这是我尝试的第一种方式。我也无法让它工作。我希望如果我弄清楚上面的问题所在,我能发现我做错了什么。
    • 所以你做错了什么。不要将c.company_id 转换为字符串。不需要。
    • 我知道我做错了什么。我正在尝试学习什么。当我没有 .ToString() 时,它会抱怨“无法将类型 'System.Guid' 隐式转换为 'string'”
    • @RememberME :此代码适用于我。我选择了所有项目的 ListBox。
    • 不,没有为我选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多