【问题标题】:MVC5 problems with DropDownList and view modelDropDownList 和视图模型的 MVC5 问题
【发布时间】:2016-03-22 06:06:29
【问题描述】:

所以我有一个 ID、EmployeeID、日期等形式的简单数据库表。它创建了一个正常的模型:

public partial class WorkItem
{
    public int ID { get; set; }
    public int EmployeeID { get; set; }
    public int LocationID { get; set; }
    [DataType( DataType.Date )]
    [Display( Name = "Start date" )]
    public System.DateTime StartDate { get; set; }

当我需要增强此模型的功能时会出现问题,因此我创建了一个视图模型来每周对工作项进行分组。

public class WeeklyWorkItemsViewModel
{
    public WorkItem WorkItemMonday { get; set; }
    public WorkItem WorkItemTuesday { get; set; }

在我的视图(绑定到视图模型)中,所有的 DateTime 字段都运行良好:

    <div class="form-group">
        @Html.LabelFor( model => model.WorkItemMonday.StartDate, "Week start date", htmlAttributes: new { @class = "control-label col-md-2" } )
        <div class="col-md-10">
            @Html.EditorFor( model => model.WorkItemMonday.StartDate, new { htmlAttributes = new { @class = "form-control" } } )
            @Html.ValidationMessageFor( model => model.WorkItemMonday.StartDate, "", new { @class = "text-danger" } )
        </div>
    </div>

在尝试绑定 dropdownlilst 时出现问题,它被正确填充,但在控制器中看不到更改。

    <div class="form-group">
        @Html.LabelFor( model => model.WorkItemMonday.EmployeeID, "EmployeeID", htmlAttributes: new { @class = "control-label col-md-2" } )
        <div class="col-md-10">
            @Html.Hidden( "selectedEmployee" )
            @Html.DropDownList( "EmployeeID", null, htmlAttributes: new { @class = "form-control" } )
            @Html.ValidationMessageFor( model => model.WorkItemMonday.EmployeeID, "", new { @class = "text-danger" } )
        </div>
    </div>

开始日期在控制器中更新。

在挠了挠头之后,我终于不得不使用以下方法解决这个问题:

@Html.Hidden( "selectedEmployee" )

并在 JQuery 中更新它。我确实尝试过使用@html.DropDownListFor,但到目前为止没有任何乐趣。 在我拔掉我所有的头发之前,谁能看看有什么问题。

【问题讨论】:

    标签: asp.net-mvc razor asp.net-mvc-5


    【解决方案1】:

    您的模型不包含名为 EmployeeID 的属性。但它确实有名为 WorkItemMonday.EmployeeIDWorkItemTuesday.EmployeeID 的。

    停止使用DropDownList() 并使用强类型DropDownListFor() 方法,以便正确绑定到模型属性。

    修改您的视图模型以包含SelectList 的属性

    public IEnumerable<SelectListItem> EmployeeList { get; set; }
    

    并在将模型传递给视图之前在 GET 方法中填充它。然后在视图中使用

    @Html.DropDownListFor(m => m.WorkItemMonday.EmployeeID, Model.EmployeeList, new { @class = "form-control" })
    ....
    @Html.DropDownListFor(m => m.WorkItemTuesday.EmployeeID, Model.EmployeeList, new { @class = "form-control" })
    

    这将正确生成 name="WorkItemMonday.EmployeeID"name="WorkItemTuesday.EmployeeID" 属性,以便在您发布时它们将绑定到您的模型。

    【讨论】:

    • @Yvette,我已经很久没有使用 ListView/WPF,所以我觉得我无能为力
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-27
    相关资源
    最近更新 更多