2013-05-01 114 views
1

我尝试了各种方法来使其工作。我想也许我在模型或控制器中缺少一些东西,所以我发布了所有三个部分。在多选列表框中显示选中的项目

我有一个数据库中的数据显示顾问在上次约会中选择的一些建议主题。当顾问调用该预约时,应用程序应显示所有可能主题的列表,并将之前选择的主题突出显示。除了最后一点之外,一切都有效

我知道我正在检索正确的信息,因为我可以单独显示所选项目。我只是不能让他们出现选择。这是代码。我正在剪掉不相关的部分。

public class AppointmentModel 
{ ... 
    public string AdvisingTopicId { get; set; } 
    public List<SelectListItem> AdvisingIdList { get; set; } 
    public SelectList AdvisingTopicNames { get; set; } 
} 

public class HomeController : AdvisorBaseController 
{ ... 
     var topicCodes = appointment.advising_topic.ToList(); 

     var advisingTopics = new SelectList((from t in topicCodes 
           select t.name).ToList(), "name"); 

     var topicsList = (from t in db.advising_topic 
          select new SelectListItem 
          { 
           Selected = false, 
           Text = t.name, 
           Value = SqlFunctions.StringConvert((double)t.advising_topic_id).Trim() 
          }).ToList(); 

     foreach (var topicCode in topicCodes) 
     { 
      var selTopic = topicsList.Find(x => x.Value == topicCode.advising_topic_id.ToString()); 
      if (selTopic != null) 
      { 
       selTopic.Selected = true; 
      } 
     } ... 
      var appointmentModel = new AppointmentModel 
      { ... 
       AdvisingTopicNames = advisingTopics, 
       AdvisingIdList = topicsList, 
      }; 

然后视图

@model AcademicAdvising.Models.AppointmentModel 
<h3>Advising Topics</h3> 
<ul> 
    @foreach (var item in Model.AdvisingTopicNames) 
    { 
     <li>@Html.DisplayFor(x => item)</li> 
    } 
</ul> 
    @Html.ListBoxFor(m=>m.AdvisingIdList, new SelectList(Model.AdvisingTopicNames, "Value", "Text", Model.AdvisingTopicNames.SelectedValue)) 

注意,在foreach正确显示所选项目。这只是为了测试,将被取消。 ListBoxFor是我挣扎的地方。我这里有什么不起作用(显示没有突出显示的完整列表)。这就是我尝试过各种方法的地方,都失败了。

+0

布莱恩·罗伯茨的建议,作品的内容。即 @ Html.ListBox(“myLB”,Model.AdvisingIdList) 返回突出显示的列表。所以我打算将它标记为已回答,然后离开并尝试弄清楚它为什么不能与ListBox一起工作。 – user2283231 2013-05-02 20:19:18

+0

有时会出现命名问题。看看你正在定义的名字,并确保你没有重复使用它们。请注意查询字符串参数和放入视图包中的项目。 – 2013-05-03 15:41:37

回答

1

看起来你可能已经意识到了太深。你已经有了一个选择列表,这是功能需要的所有列表框。

@Html.ListBoxFor(m=>m.AdvisingIdList, Model.AdvisingTopicNames) 

但说实话看你如何定义你的列表我觉得你真的想可能是

@Html.ListBoxFor(m=>m.AdvisingIdList, Model.AdvisingIdList) 
+0

这些都没有工作。前者仅导致选定的主题显示(没有突出显示)。后者导致显示所有主题,但没有突出显示。尽管感谢您的快速回复。 – user2283231 2013-05-01 20:32:03

+0

这听起来像是一个数据问题。第二个是显示完整列表,但是发生了什么似乎你没有设置任何'选择'检查出你的代码行如果(selTopic!= null) { selTopic.Selected = true; }并确保如果实际上正在被击中,并且某事正在触发所选标志为真。 – 2013-05-01 20:36:25

+0

我以为我检查过,但我会再看一次,因为你的想法和我的很像 - 它只是感觉像数据问题而不是演示问题。如果我能解决这个问题,我会回来标记解决方案。 – user2283231 2013-05-01 20:48:03

相关问题