【发布时间】:2021-11-29 02:44:57
【问题描述】:
我正在尝试将我的 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);
...
}
尽管在 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),但似乎没有办法将这个值传输到服务器端。
有人知道如何提取所选索引的值并将其传输到模型中吗?
【问题讨论】:
-
如果您想保持在同一页面上,您需要使用 ajax 将值发送到服务器。当你选择一个选项时,你想做什么?
-
是的,这正是我想要做的(就像在我的 webforms 项目中一样 - 请参阅上面的代码,至少我被告知它是 ajax)。刚刚获得了所选索引的帮助,我开始研究 ajax 如何与 ASP.NET MVC 一起使用,以及选择项目将如何触发事件(现在我使用提交按钮进行测试)。当然,我们将不胜感激任何帮助。
-
你还没有解释你想要什么,所以当你选择一个选项时!
$('#SelectedIndexes').change(function() { var selected = $(this).val(); $.post(your url, { id: selected }. function(data) { do somethng with the data you return }); }); -
并摆脱
onchange = "selectedIndexChanged()"(使用Unobtrusive Javascritpt)。并替换您的style attribute with a class. And it already looks likeModel.Entries` 是IEnumerable<SelectList>因此在视图中使用new SelectList(..)创建另一个相同的是没有意义的。 -
对不起...我想使用选定的索引对模型中的一些字符串值进行排序,然后在文本框中显示这些值。您可以在原始 webforms 项目中看到功能(仅用于我的学习目的,所以不要把那里的文字看得太重)specdictionary-001-site1.etempurl.com/ContactsEN.aspx,用户名:Klient,密码:1234
标签: c# asp.net-mvc listbox