Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 下拉列表';s selectedValue不';不受DB值的影响_Asp.net Mvc_Asp.net Mvc 2 - Fatal编程技术网

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
    ,您可能已经建议它实际上是
    Model.action
    (小写拼写)。这是故意的还是打字错误?我们能看看生成SelectList的代码吗?你可以将其传递给你的视图吗?@David,我已将你要求的信息添加到我的帖子中。谢谢。只是澄清一下这个问题——您希望两个下拉列表都设置了选定的值,对吗?我的VB可能有点生疏,但您在哪里设置所选值?如果您查看我的aspx代码,在每个下拉列表的声明中,我声明了一个新的SelectList,并在构造函数中指定Model.type和Model.action中包含的值是SelectedValue。它在“type”下拉列表中工作得非常好,只是不适用于action。另一个说明——您的第二个下拉列表的选定值是
    Model.action
    ,您可能已经建议它实际上是
    Model.action
    (小写拼写)。这是故意的还是打字错误?在这种情况下,GetTypeValues之类的函数仅用于填充将提供给下拉框的IEnumerable。在下拉式构造函数中,指定为
    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 { }
    }