【发布时间】:2021-09-07 23:52:11
【问题描述】:
我正在使用 ASP.NET Core MVC。
在视图中,我有一个下拉菜单:
@foreach (TemplateData sheet in Model)
{
<tr>
<td>@sheet.ID</td>
<td>@sheet.Warehouse</td>
<td>@sheet.Observation</td>
<td>@sheet.EmpName</td>
<td>
@Html.DropDownList("DDLStatus", new List<SelectListItem>
{
new SelectListItem{ Text="", Value = "0" },
new SelectListItem{ Text="Completed", Value = "1" },
new SelectListItem{ Text="Declined", Value = "2" },
new SelectListItem{ Text="Under Review", Value = "3" }
}, new { @id = "DDLStatus", @onchange = @"ddlVal()" });
</td>
</tr>
<tr>
<td>
<input type="button" id="btnSubmit" value="Update Status" class="ids" data-id="@sheet.ID" onClick="sendId(@sheet.ID)" />
</td>
</tr>
页面上有几行,每行都有一个类似的下拉菜单。我必须从单击按钮的行中选择下拉菜单的文本。
我正在使用在按钮单击事件时触发的 Javascript 代码,但该 JS 代码只获取页面第一行的第一个 DropDown 文本。
我希望如果我点击第四个下拉菜单,只有这个文本应该存储在模型的变量中。
function sendId(id) {
var e = document.getElementById('DDLStatus');
var text = e.options[e.selectedIndex].text;
var value = DDLStatus.value;
alert(text);
$.ajax({
url: '/UpdateStatus/' + id,
type: 'GET',
success: function() { alert('Success'); },
error: function() { alert('Error'); }
});
}
** 已编辑 **
我想到了另一种方法,但不知道如何实施。我可以使用 DropDownListFor ,它可以像模型中的其他元素一样再次绑定。
为此,我在模型中添加了一个字段,如下所示:
public StatusCode WorkStatus { get; set; }
public enum StatusCode
{
Completed,
InProgress
}
如果我使用 DropDownListFor 可以解决问题吗?我认为它应该像我获取 sheet.ID 一样工作。
要采用这种方法,唯一的问题是如何构造一个 DropDownListFor 定义,因为它使用的是枚举。
【问题讨论】:
-
如果您获得多个
tr,那么您就会遇到问题,因为您会获得多个具有相同 ID 的元素。 ID 应该始终是唯一的。 -
是的,这就是问题所在。
-
您的按钮在所有行的新行中?
-
@Swati 所有行都有按钮。当我单击按钮时,我可以获得该行的 ID。这是工作。顺便说一句,我已经在脑海中用替代方法编辑了原始帖子。
标签: javascript jquery asp.net-core asp.net-core-mvc