【问题标题】:Html.DropdownListFor troubleshootHtml.DropdownList 用于疑难解答
【发布时间】:2013-12-10 13:45:18
【问题描述】:

我正在尝试学习 DropDownListFor 的语法。

for 循环中给出以下内容:

@Html.DropDownListFor(  
        model => model.SalutationID, Model.AvailableSalutations.Select(option => new SelectListItem 
        {
            Selected = (option.ID == staff.SalutationID),
            Text = option.Desc.ToString(),
            Value = option.ID.ToString()
        }
    ), 
    "Choose...")

... 鉴于 staff.SalutationID 确实回显了正确的值(例如,当我只使用 @Html.ValueFor(model => staff.SalutationID) 时),为什么在我的循环中回显的每个下拉菜单默认为“选择...”而不是 @ 987654324@选项?

【问题讨论】:

  • 这一切对我来说都是正确的。您可能会尝试的一件事是,如果 model.SalutationID = staff.SalutationID for helper 应该自动设置选定项,并且您不需要在选择列表项上设置它。您可以尝试删除它,看看是否有什么不同
  • @MattBodily 没有马特,没有区别...

标签: asp.net-mvc-4 razor html-helper


【解决方案1】:

决定下拉列表中选择的选项是Html.DropDownListFor中第一个参数中的lambda指定的模型属性的值。在你的情况下model => model.SalutationID

验证model.SalutationID 在模型中是否具有预期值。如果没有,请在渲染视图之前在控制器的操作中指定它。

【讨论】:

  • 您的意思是回显该 lambda 所持有的值,以查看它是否 a) 存在并且 b) 正确?如果是这样,我已经在循环中尝试了Html.ValueFor(model => staff.SalutationID),并且每条记录的值都正确显示...我不知道如何验证它?
  • 你让我正常工作 - 我将 lambda 表达式更改为 model => staff.SalutationID,其中 var staff = Model.AvailableStaffMembers[i]; 在循环内。这使它工作。谢谢!
  • 我建议您将 SelectLists 直接定义为视图模型属性,并在操作中填充它们(控制器的方法)。通过这种方式,可以更轻松地调试、单元测试和修改视图而不会出现问题。
  • 我已经(我认为!)这样做了。但是我正处于学习 ASP MVC 的早期阶段,我发现文档非常密集。所以我在这里:(
  • 不,你没有:) 也许你甚至没有使用视图模型。视图模型是专门为充当视图模型而创建的类:当您返回View("ViewName", model) 时,它就是model。你应该总是使用这些类,通常这些类的一些成员看起来像public SelectList Salutations {get;set;},所以你的下拉列表呈现这样@Html.DropDownListFor(m => m.SalutationId, Model.Salutations)我们都曾经是新手。
猜你喜欢
  • 2013-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-06
  • 2014-08-29
  • 2011-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多