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

C# ASP.NET MVC-获取列表框中选定索引的值,c#,asp.net-mvc,listbox,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"

我是编程新手。我正在尝试将我的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>
尽管在IT论坛上搜索了两天,但我还没有找到在ASP.NET MVC中接收所选索引的方法

我以以下方式填充视图中的列表框:

@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
),但似乎无法将该值传输到服务器端

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


非常感谢您。

ListBoxFor()接受
IEnumerable
作为参数,因此您不必在此处使用SelectList。您可以使用linq生成项目,在您的情况下,您可以将
new SelectList(Model.Entries,“Value”,“Text”)
替换为
Model.Entries.Select.Select((e,i)=>new SelectListItem{Text=e.Text,Value=i.ToString()})
ListBoxFor()接受
IEnumerable
作为参数,因此您不必在此处使用SelectList。您可以使用linq生成项目,在您的情况下,您可以将
new SelectList(Model.Entries,“Value”,“Text”)
替换为
Model.Entries.Select.Select((e,i)=>new SelectList项目{Text=e.Text,Value=i.ToString()})
在MVC控制器中,使用HTML的name属性自动将值从HTML视图绑定到模型。 因此,您应该在接收参数模型和Razor语法中使用相同的名称,如(使用property name=“ListBox1”使服务器本身能够理解它):


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


你的问题让人困惑!这就是我的理解。具体说明您是想在Controller中接收选定的值,还是想在更改下拉列表中使用DOM?我想在将使用它的模型中接收选定索引的编号。因此,您可以使用我提供的方法来实现它。非常感谢您的帮助:-)。我也有一些关于绑定的问题,但现在它可以工作了。你的问题让人困惑!这就是我的理解。具体说明您是想在Controller中接收选定的值,还是想在更改下拉列表中使用DOM?我想在将使用它的模型中接收选定索引的编号。因此,您可以使用我提供的方法来实现它。非常感谢您的帮助:-)。我在绑定方面也遇到了一些问题,但现在它可以工作了。如果您想保持在同一页面上,需要使用ajax将值发送到服务器。当你选择一个选项时,你想做什么?是的,没错,这就是我想做的(就像在我的webforms项目中一样——请看上面的代码,至少我被告知这是ajax)。在刚刚获得所选索引的帮助之后,我开始了解ajax是如何与ASP.NET MVC一起使用的,以及选择项目将如何触发事件(现在我使用submit按钮进行测试)。当然,任何帮助都将不胜感激。当你选择一个选项时,你仍然没有解释你想要什么<代码>$('#selectedIndex').change(function(){var selected=$(this.val();$.post(您的url,{id:selected}.function(data){do something with the data your return});})并去掉
onchange=“selectedIndexChanged()”
(使用)。并用类替换
样式属性。而且它已经看起来像是
Model。条目`是IEnumerable,因此在视图中使用新的选择列表(…)创建另一个相同的条目是毫无意义的。对不起。。。我想使用所选索引对模型中的一些字符串值进行排序,然后在文本框中显示这些值。您可以看到原始webforms项目中的功能(这只是为了我的学习目的,所以不要把那里的文本看得太重),username:Klient,password:1234如果您想保持在同一页面上,您需要使用ajax将值发送到服务器。当你选择一个选项时,你想做什么?是的,没错,这就是我想做的(就像在我的webforms项目中一样——请看上面的代码,至少我被告知这是ajax)。在刚刚获得所选索引的帮助之后,我开始了解ajax是如何与ASP.NET MVC一起使用的,以及选择项目将如何触发事件(现在我使用submit按钮进行测试)。当然,任何帮助都将不胜感激。当你选择一个选项时,你仍然没有解释你想要什么<代码>$('#selectedIndex').change(function(){var selected=$(this.val();$.post(您的url,{id:selected}.function(data){do something with the data your return});})并去掉
onchange=“selectedIndexChanged()”
(使用)。并用类替换
样式属性。而且它已经看起来像是
Model。条目`是IEnumerable,因此在视图中使用新的选择列表(…)创建另一个相同的条目是毫无意义的。对不起。。。我想使用所选索引对模型中的一些字符串值进行排序,然后在文本框中显示这些值。您可以在原始webforms项目中看到该功能(它仅用于我的学习目的,因此不要太认真地对待那里的文本),用户名:Klient,密码:1234
@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" })
@Html.ListBoxFor(x => x.SelectedIndexes, new SelectList(Model.Entries, 
    "Value", "Text"), new{ id ="ListBox1",name="ListBox1", 
     onchange="selectedIndexChanged()", 
     style = "your css" })