ASP.NET MVC - 获取列表框中所选索引的值

时间:2017-11-09 14:09:21

标签: c# asp.net-mvc listbox

我是编程新手。我正在尝试将我的ASP.NET Webforms项目迁移到ASP.NET MVC(用于学习目的)。我需要从ASP.NET MVC中的列表框中获取所选索引的值,并使用此索引在文本框中对字符串进行排序。在我的webforms项目中非常简单:

<asp:ListBox ID="ListBox1" runat="server" AutoPostBack="True" 
     Height="166px" Width="198px" 
     BackColor="Black" Font-Bold="True" ForeColor="White" Font-Size="Small"
     OnSelectedIndexChanged="ListBox1_SelectedIndexChanged">
</asp:ListBox>

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:TextBox ID="TextBox1" runat="server" 
            Height="149px" Width="286px" 
            TextMode="MultiLine" OnTextChanged="TextBox1_TextChanged" 
            AutoPostBack="True" Font-Bold="True" ForeColor="#006600">
        </asp:TextBox>
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="ListBox1" 
             EventName="SelectedIndexChanged" />                              
    </Triggers>
</asp:UpdatePanel>

背后的代码是:

protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
     ...
     i = ListBox1.SelectedIndex;
     TextBox1.Text += ....// here is a string sorted based on the selected index i);
      ...                                        
}

但是我没有找到一种方法来接收ASP.NET MVC中的选定索引,尽管在IT论坛进行了为期两天的搜索。

我以这种方式在视图中填充了列表框:

@Html.ListBoxFor(x => x.SelectedIndexes, new SelectList(Model.Entries, 
"Value", "Text"), new { id = "ListBox1", onchange = 
"selectedIndexChanged()", style = "width:198px; height:166px; color:white; 
background:black; font-weight:bold" })

条目列表在模型中创建,并通过控制器发送到视图。它工作,并填充列表框。但是在ASP.NET MVC中,似乎没有像ListBox1.SelectedIndex那样的东西。是否可以在客户端接收该值(JavaScript的声明:document.getElementById("ListBox1").selectedIndex),但似乎无法将此值传输到服务器端。

有人知道如何提取所选索引的值并将其传输到模型中吗?

非常感谢你。

2 个答案:

答案 0 :(得分:0)

ListBoxFor()接受IEnumerable<SelectListItem>作为参数,因此您不必在此处使用SelectList。您可以使用linq生成项目,在您的情况下,您可以将new SelectList(Model.Entries, "Value", "Text")替换为Model.Entries.Select((e, i) => new SelectListItem { Text = e.Text, Value = i.ToString() })

答案 1 :(得分:0)

在MVC控制器中,使用HTML的name属性自动将值从HTML视图绑定到Model。 因此,您应该在接收参数模型和Razor语法中使用相同的名称,例如(使用属性名称=“ListBox1”使服务器本身理解):

@Html.ListBoxFor(x => x.SelectedIndexes, new SelectList(Model.Entries, 
    "Value", "Text"), new{ id ="ListBox1",name="ListBox1", 
     onchange="selectedIndexChanged()", 
     style = "your css" })