【发布时间】:2021-08-24 09:03:18
【问题描述】:
我有以下 Razor 标记:
@Html.DropDownListFor(x => Model.WorkTypeId, new SelectList(Model.WorkTypeList, "Id", "Name", Model.WorkTypeId), " - please select - ", new { style = "background-color: yellow;"})
@Html.DropDownListFor(x => Model.PhaseGroupId, new SelectList(Model.PhaseGroupList, "Id", "Name", Model.PhaseGroupId), " - please select - ", new { style = "background-color: yellow;"})
然后我使用 jQuery $.get 调用加载这些驻留的表单,并将 change 处理程序分配给调用的 success 函数中的两个下拉列表:
function(data) {
$("#formContainer").html(data);
$("#WorkTypeId").change(function () {
lookupMatrixValues($("#WorkTypeId").val(), $("#PhaseGroupId").val());
});
$("#PhaseGroupId").change(function () {
lookupMatrixValues($("#WorkTypeId").val(), $("#PhaseGroupId").val());
});
})
当我在WorkTypeId 下拉列表中选择一个项目时,change 事件不会触发,而如果我选择一个PhaseGroupId 项目,它的事件会触发。
另外,当我发布表单时,无论为工作类型选择什么值,模型属性WorkTypeId 的值始终为零,就好像选择本身没有检测到更改事件一样。
如果我查看为 DropDownFor 标记呈现的内容,我会发现这两个选择的呈现方式略有不同:
<select id="WorkTypeId" name="WorkTypeId" style="background-color: yellow;">
...
<select data-val="true" data-val-number="The field PhaseGroupId must be a number." id="PhaseGroupId" name="PhaseGroupId" style="background-color: yellow;">
我很好奇为什么只有PhaseGroupId 选择具有data-val 和data-val-number 属性,而WorkTypeId 选择没有这些属性。模型属性完全相同:
public int? WorkTypeId { get; set; }
public int? PhaseGroupId { get; set; }
为什么WorkTypeId select 呈现方式不同,为什么它的绑定模型属性从不反映所选内容。无论选择什么,$("#WorkTypeId").val() 始终为零。
【问题讨论】:
标签: html jquery asp.net-mvc html-select