DropDownListFor 返回选择的值总是 0

Posted

技术标签:

【中文标题】DropDownListFor 返回选择的值总是 0【英文标题】:DropDownListFor returns selected value always 0 【发布时间】:2021-11-21 16:06:42 【问题描述】:

我有一个代码,我尝试将模型中的数据绑定到 DropDownListFor,它在执行时成功地在视图中显示下拉列表,但除了 0 之外,它始终不返回所选值。我已经检查并尝试了这里发布的许多解决方案,但似乎没有成功。

AdminController.cs(Create.cshtml 视图的 Create() 操作和 ProductSave() 表单操作)

public ActionResult Create()
        

            var categoryList = _context.Categories.ToList();
            var viewModel = new CreateViewModel
            
                Categories = categoryList,
            ;
            return View(viewModel);
        

[HttpPost]
public ActionResult ProductSave(CreateViewModel viewModel)
        
           return Content(viewModel.SelectedId.ToString());
        

CreateViewModel.cs

public class CreateViewModel
    
        public IEnumerable<Category> Categories  get; set; 

        public int SelectedId  get; set; 
        public Product Product  get; set; 
    

Create.cshtml(我这里只包含了视图的必要字段)

@using (Html.BeginForm("ProductSave", "Admin",null,FormMethod.Post))
        
            @Html.AntiForgeryToken()

            <div class="default-form-wrap style-2">

                @Html.ValidationSummary(true, "", new  @class = "text-danger" )

                <div class="form-group">
                    @Html.LabelFor(model => model.Product.Category_Id, new  @class = "control-label")

                    <div class="nice-select single-select">
                        @Html.DropDownListFor(model => model.SelectedId,new SelectList(Model.Categories,"Id","CategoryName"),"Select Category", new  @class = "form-control"  )
                        @Html.ValidationMessageFor(model => model.Product.Category_Id, "", new  @class = "text-danger" )
                    </div>
                </div>
                <div class="row text-center">
                        <div class="col">
                            <input type="submit" value="Create" class="btn btn-base" />
                        </div>
                </div>
            </div>

选择类别后,值会相应更改 Screenshot

点击提交按钮后,我尝试在表单操作方法中返回 Content() 以查看绑定视图模型的输出

return Content(viewModel.SelectedId.ToString());

但这就是我得到的 Screenshot

我只想得到与所选列表项对应的输出。

【问题讨论】:

在您粘贴到此处的屏幕截图中,我没有看到 selectedId 作为控件名称。您可以尝试几件事:(1)手动将名称属性设置为下拉列表的“selectedId”。 (2)将selectedId的数据类型改为nullable int。 【参考方案1】:

查看您的 HTML,罪魁祸首可能是:

<div class="nice-select single-select">

DropdownListFor 应该生成一个带有 ID 值的 &lt;select&gt; 元素,MVC 将解析该 ID 值以在回程中填充模型。您的 HTML 正在生成 &lt;ul&gt;

您可以删除外部&lt;div&gt; 或类定义,它应该可以工作。让“nice-select”工作可能需要一些阅读它是什么并与 MVC 绑定控件交互以使其与表单回发兼容。您可能需要使用一些 javascript@Html.HiddenFor,因此当从 &lt;ul&gt; 中选择一个值时,与模型相关的隐藏输入会更新并可用于回发。

【讨论】:

就是这样。我删除了"nice-select single-select" 类属性并使用自定义样式属性为其提供了与 DropDownListFor 类似的外观。

以上是关于DropDownListFor 返回选择的值总是 0的主要内容,如果未能解决你的问题,请参考以下文章

如何使用对象 MVC 5 C# 的 Javascript 列表填充剃刀 DropDownListFor

Razor Html.DropDownListFor 自动设置选中值

填充 DropDownListFor:HtmlHelper 不包含“DropDownListFor”的定义

如何在MVC 5中使用DropdownListFor在多个DropDownList中选择值

mvc dropdownlistfor 验证在提交前运行

MySQL使用Group Bu返回不正确的值[重复]