我是编程新手。我正在尝试将我的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
),但似乎无法将此值传输到服务器端。
有人知道如何提取所选索引的值并将其传输到模型中吗?
非常感谢你。
答案 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" })