0

我正在尝试建立一个员工考勤表。
这是我的AttendanceModel

public class AttendanceModel 
{
    //Primary Key and auto-generated field for this model
    public int AttendanceID { get; set; }

    public DateTime AttendanceDate { get; set; }

    //Present/Absent status
    public bool Status { get; set;}

    //Primary key of Employee Model
    public int EmployeeID { get; set; }

    //Reference to Employee Model
    public Employee Employee { get; set; }

}

现在我想让这个模型制作一个View包含employeeId(Hidden field)、员工姓名和出勤复选框。
我的问题是(第 3 天编辑)

  1. 我是否必须为此视图使用不同的 ViewModel
  2. 如何将信息从view实体插入并最终插入数据库,因为它需要在数据库中插入多行(即批处理)
  3. 我也没有得到如何从视图中检索信息以进行处理

任何建议都是可观的。:)
提前致谢!!!
*编辑(我尝试过的) * 1. 我创建了另一个类,其中包含除对模型类的引用之外的AttendanceViewModel所有字段。然后在我渲染它。在控制器中,参数是并从中填充出勤模型。这是代码。 AttendanceModelEmployeeviewIEnumerable<AttendanceViewModel>

public ActionResult Index()
    {            
        var EmployeeAttendance = from s in new EmployeeDBContext().Employees
                                select new AttendanceViewModel
                                {
                                    EmployeeID = s.EmployeeID
                                };
        return View(EmployeeAttendance.ToList());
    }

保存记录的控制器动作是

 [HttpPost]
    public ActionResult SaveAttendance(IEnumerable<AttendanceViewModel> attendancess)    // argument of SaveAttendance is always `null`
    {

            if (ModelState.IsValid)
            {
                var _context = new EmployeeDBContext();

                foreach (var a in attendancess)
                {
                    var newAttendance = new AttendanceModel
                    {
                        EmployeeID = a.EmployeeID,
                        AttendanceStatus = a.Status
                    };

                    _context.Attendance.Add(newAttendance);

                }
                _context.SaveChanges();
            }
           //Rest of code

但它不起作用的论点总是null:(

4

1 回答 1

1

如果您想从视图向控制器发送附加信息,您必须将值设置为隐藏的输入字段,例如employeeId。或者,您可以通过添加到 Session 对象将附加属性存储在侧内存中。

List<int> CheckedEmpIds您必须在 ViewModel中使用属性。并在视图中将employeeId 的值设置为复选框值。

<input type="checkbox" name="CheckedEmpIds" value="@Model.Employee.Id" />

当您提交表单时,您可以获得已检查的员工 ID。

于 2012-04-19T06:36:46.883 回答