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的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core与ASP.NET区别

ASP.NET和ASP的区别是啥?

ASP.NET 生命周期 – ASP.NET 应用生命周期

ado.net和asp.net区别?

ASP.NET开发人员需要学习ASP.NET MVC么?

ASP.NET 5 改名 ASP.NET Core 1.0