ASP.NET @Html.DropDownListFor() 选择的值设置为 true 但提交给控制器时返回 false
Posted
技术标签:
【中文标题】ASP.NET @Html.DropDownListFor() 选择的值设置为 true 但提交给控制器时返回 false【英文标题】:ASP.NET @Html.DropDownListFor() selected value is set to true but returns false when submitted to the controller 【发布时间】:2021-06-03 10:24:00 【问题描述】:我不知道提交代码时发生了什么。我正在尝试根据提交时选择的内容来获取员工和经销商@html.DropDownListFor()
的正确值。我在控制器的[HttpGet]
方法中将值设置为true,并且在传递给视图时设置并正确显示。但是当我提交表单时,我在控制器的[HttpPost]
方法中得到false
。这是控制器、视图、viewModel 代码。
控制器
[HttpGet]
public ActionResult CreateNewItem()
CreateNewItemViewModel viewModel = new CreateNewItemViewModel()
EnableListingEmployee = true,
EnableListingDealer = true,
...
;
return View(viewModel);
[HttpPost]
public ActionResult CreateNewItem(CreateNewItemViewModelviewModel viewModel)
...
查看
<!-- Employee Enable Listing -->
<tr class="optionYes">
<td class="DisplayFieldName">
@Html.LabelFor(m => m.EnableListingEmployee)
</td>
<td class="DisplayFieldData">
@Html.DropDownListFor(m => m.EnableListingEmployee, new[]
new SelectListItem Text = "Yes", Value = "true" ,
new SelectListItem Text = "No", Value = "false" ,"Select.....",
new @Name = "EmployeeEnableListing", @id = "EmployeeEnableListing", style = "width:207px;font-size:10pt;" )
</td>
</tr>
Dealer 就是 Dealer 代替 Employee。
视图模型
[Display(Name = "Enable Listing")]
public bool EnableListingEmployee get; set;
我想这就是一切,如果我们需要看其他内容,请告诉我。
【问题讨论】:
【参考方案1】:是因为下面这段代码:
new @Name = "EmployeeEnableListing"
由于您更改了下拉列表的名称属性,因此在发布表单时,mvc 模型绑定器无法填充 EnableListingEmployee
属性。由于 mvc 将 input 元素的 name 属性绑定到表单 post 上的 Model 对象属性。
目前它以false
发布,因为它是bool
的默认值,这意味着该值实际上并未发布。
您需要删除这个明确的名称以使其工作。
类似:
@Html.DropDownListFor(m => m.EnableListingEmployee, new[]
new SelectListItem Text = "Yes", Value = "true" ,
new SelectListItem Text = "No", Value = "false"
,
"Select.....",
new
id = "EmployeeEnableListing",
style = "width:207px;font-size:10pt;"
)
【讨论】:
如果我更改@Name
属性以匹配模型,它是否也有效? EnableListingEmployee
@whisk 是的,应该以上是关于ASP.NET @Html.DropDownListFor() 选择的值设置为 true 但提交给控制器时返回 false的主要内容,如果未能解决你的问题,请参考以下文章