【问题标题】:ASP.NET @Html.DropDownListFor() selected value is set to true but returns false when submitted to the controllerASP.NET @Html.DropDownListFor() 选择的值设置为 true 但提交给控制器时返回 false
【发布时间】: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; }

我想这就是一切,如果我们需要看其他内容,请告诉我。

【问题讨论】:

    标签: c# asp.net asp.net-mvc visual-studio


    【解决方案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 是的,应该
    猜你喜欢
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    • 2018-11-02
    相关资源
    最近更新 更多