DropDownList和视图模型的MVC5问题

安迪·肯兹

因此,我有一个简单的数据库表,形式为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,但到目前为止还没有任何乐趣。在我将所有头发拔出之前,谁能看到什么毛病。

用户名

您的模型不包含名为的属性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"属性,以便它们在您发布时绑定到您的模型。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章