Asp.net mvc 下拉列表';s selectedValue不';不受DB值的影响
这个问题让我抓狂,周一早上也帮不了什么忙 我正在加载两个下拉框,如下所示:Asp.net mvc 下拉列表';s selectedValue不';不受DB值的影响,asp.net-mvc,asp.net-mvc-2,Asp.net Mvc,Asp.net Mvc 2,这个问题让我抓狂,周一早上也帮不了什么忙 我正在加载两个下拉框,如下所示: 此函数获取受db值影响的selectedvalue <dd><%= Html.DropDownList("type", New SelectList(ViewData("typeList"), "value", "text", Model.type), New With {.class = ""})%></dd> 能否尝试设置正确的SelectListItem.Selec
- 此函数获取受db值影响的selectedvalue
<dd><%= Html.DropDownList("type", New SelectList(ViewData("typeList"), "value", "text", Model.type), New With {.class = ""})%></dd>
能否尝试设置正确的
值?我假设应该在下面选择SelectListItem.Selected
项Imagem
Private Function GetTypeValues() As IEnumerable(Of SelectListItem) Dim list As New List(Of SelectListItem) Dim sel As SelectListItem 'Imagem sel = New SelectListItem sel.Text = "Imagem" sel.Value = "image" sel.Selected = True ' This line has been added list.Add(sel) '... Return list End Function
能否尝试设置正确的
值?我假设应该在下面选择SelectListItem.Selected
项Imagem
Private Function GetTypeValues() As IEnumerable(Of SelectListItem) Dim list As New List(Of SelectListItem) Dim sel As SelectListItem 'Imagem sel = New SelectListItem sel.Text = "Imagem" sel.Value = "image" sel.Selected = True ' This line has been added list.Add(sel) '... Return list End Function
我采用了与您类似的方法,在viewmodel中构建SelectList,并使用Html.DropDownList从视图中引用它 一个很大的区别是,我总是将值/文本参数设置为字符串值,即使相应的数据是int 示例(C#-抱歉):私有列表小部件; 公共列表小部件 { 得到 { if(widgets==null) { widgets=newlist(); 添加(新的SelectListItem{Value=“10”,Text=“10”}); 添加(新的SelectListItem{Value=“25”,Text=“25”}); 添加(新的SelectListItem{Value=“50”,Text=“50”}); 添加(新的SelectListItem{Value=“100”,Text=“100”}); 添加(新的SelectListItem{Value=“500”,Text=“500”}); } 返回窗口小部件; } 私有集{} }
另一个区别是,我强烈地将视图键入视图模型,然后直接从视图访问视图模型的SelectList属性,而不是将其指定给控制器中的viewdata,尽管我怀疑这是造成此问题的原因。看起来您将视图直接绑定到实体(即域模型)。我采用了与您类似的方法,在我的视图模型中构建SelectList,并使用Html.DropDownList从视图中引用它 一个很大的区别是,我总是将值/文本参数设置为字符串值,即使相应的数据是int 示例(C#-抱歉):私有列表小部件; 公共列表小部件 { 得到 { if(widgets==null) { widgets=newlist(); 添加(新的SelectListItem{Value=“10”,Text=“10”}); 添加(新的SelectListItem{Value=“25”,Text=“25”}); 添加(新的SelectListItem{Value=“50”,Text=“50”}); 添加(新的SelectListItem{Value=“100”,Text=“100”}); 添加(新的SelectListItem{Value=“500”,Text=“500”}); } 返回窗口小部件; } 私有集{} }
另一个区别是,我强烈地将视图键入视图模型,然后直接从视图访问视图模型的SelectList属性,而不是将其指定给控制器中的viewdata,尽管我怀疑这是造成此问题的原因。看起来您将视图直接绑定到实体(即域模型)。我找到了这个问题的答案,老实说,我对最终结果感到有点羞愧。 似乎我在ViewData变量中使用了名称“action”,这使得它与dropdownbox的名称“action”冲突。 将ViewData更改为“actions”(添加了“s”)后,它停止执行冲突并正确分配selectedvalue 我给任何遇到与我相同问题的人的建议是,为了安全起见,确保没有其他控件使用您分配给对象的相同名称
感谢大家的指点。我找到了这个问题的答案,老实说,我对最终的结果感到有点羞愧。 似乎我在ViewData变量中使用了名称“action”,这使得它与dropdownbox的名称“action”冲突。 将ViewData更改为“actions”(添加了“s”)后,它停止执行冲突并正确分配selectedvalue 我给任何遇到与我相同问题的人的建议是,为了安全起见,确保没有其他控件使用您分配给对象的相同名称
感谢大家在这里的指点。我们可以看看生成SelectList的代码吗?你可以将其传递给你的视图吗?@David,我已经将你要求的信息添加到我的帖子中了。谢谢。只是澄清一下这个问题——您希望两个下拉列表都设置了选定的值,对吗?我的VB可能有点生疏,但您在哪里设置所选值?如果您查看我的aspx代码,在每个下拉列表的声明中,我声明了一个新的SelectList,并在构造函数中指定Model.type和Model.action中包含的值是SelectedValue。它在“type”下拉列表中工作得非常好,只是不适用于action。另一个说明——您的第二个下拉列表的选定值是
,您可能已经建议它实际上是Model.action
(小写拼写)。这是故意的还是打字错误?我们能看看生成SelectList的代码吗?你可以将其传递给你的视图吗?@David,我已将你要求的信息添加到我的帖子中。谢谢。只是澄清一下这个问题——您希望两个下拉列表都设置了选定的值,对吗?我的VB可能有点生疏,但您在哪里设置所选值?如果您查看我的aspx代码,在每个下拉列表的声明中,我声明了一个新的SelectList,并在构造函数中指定Model.type和Model.action中包含的值是SelectedValue。它在“type”下拉列表中工作得非常好,只是不适用于action。另一个说明——您的第二个下拉列表的选定值是Model.action
,您可能已经建议它实际上是Model.action
(小写拼写)。这是故意的还是打字错误?在这种情况下,GetTypeValues之类的函数仅用于填充将提供给下拉框的IEnumerable。在下拉式构造函数中,指定为Model.action
Private Function GetTypeValues() As IEnumerable(Of SelectListItem) Dim list As New List(Of SelectListItem) Dim sel As SelectListItem 'Imagem sel = New SelectListItem sel.Text = "Imagem" sel.Value = "image" list.Add(sel) 'Video sel = New SelectListItem sel.Text = "Video" sel.Value = "video" list.Add(sel) Return list End Function Private Function GetActionValues() As IEnumerable(Of SelectListItem) Dim list As New List(Of SelectListItem) Dim sel As SelectListItem ' Call browser window sel = New SelectListItem sel.Text = "Mostrar Janela" sel.Value = 1 list.Add(sel) ' Play fullscreen video sel = New SelectListItem sel.Text = "Mostrar Video em FullScreen" sel.Value = 2 list.Add(sel) ' Show fullscreen picture sel = New SelectListItem sel.Text = "Mostrar Imagem em FullScreen" sel.Value = 3 list.Add(sel) Return list End Function
Private Function GetTypeValues() As IEnumerable(Of SelectListItem) Dim list As New List(Of SelectListItem) Dim sel As SelectListItem 'Imagem sel = New SelectListItem sel.Text = "Imagem" sel.Value = "image" sel.Selected = True ' This line has been added list.Add(sel) '... Return list End Function
private List<SelectListItem> widgets; public List<SelectListItem> Widgets { get { if (widgets == null) { widgets = new List<SelectListItem>(); widgets.Add(new SelectListItem { Value = "10", Text = "10" }); widgets.Add(new SelectListItem { Value = "25", Text = "25" }); widgets.Add(new SelectListItem { Value = "50", Text = "50" }); widgets.Add(new SelectListItem { Value = "100", Text = "100" }); widgets.Add(new SelectListItem { Value = "500", Text = "500" }); } return widgets; } private set { } }