了解可枚举和ViewModel

伊蒙

我正在尝试学习ASP.NET MVC(C#),目前正在处理ViewModels。我了解ViewModels的目的,可以使用它们将数据传递到屏幕上,但是在理解它们与接口之间的关系时遇到了困难。

我要实现以下视图:

示例布局您可以看到我有一个简单的初始插入表单,用于添加新工作人员,并带有一个下拉菜单以表示称呼。此后,还有第二种编辑形式,在该表单中,我迭代可用的工作人员,将其值放入相关的输入字段,其中称呼下拉列表默认为相对称呼。

我有两个域模型/表Prm_StaffPrm_Salutation,我正在通过ViewModel Staff_VM访问(我想错了字):

public class Staff_VM
{
    public int StaffID { get; set; }
    public int SalutationID { get; set; }
    public string FName { get; set; }
    public string LName { get; set; }
    public bool Active { get; set; }

    public List<Prm_Salutation> AvailableSalutations { get; set; }
}

public class StaffMembers
{
    public Staff_VM StaffVm;
    public IEnumerable<Staff_VM> ListStaffVms;
}

在我的控制器中:

var activeSalts = (from a in db.Prm_Salutations
                where a.Active == true
                orderby a.Desc ascending
                select a).ToList();

var model = new StaffMembers
{
    ListStaffVms = (from a in db.Prm_Staffs
                    where a.Active == true
                    orderby a.LName ascending
                    select new Staff_VM
                    {
                        StaffID = a.Prm_StaffID,
                        SalutationID = a.SalutationID,
                        FName = a.FName,
                        LName = a.LName,
                        Active = a.Active,
                        AvailableSalutations = activeSalts
                    }),
    StaffVm = new Staff_VM()
    {
        AvailableSalutations = activeSalts
    },
};

return View("StaffMembers", model);

在视图中,我指的是该模型@model November.ViewModels.StaffMembers

@*Record New Staff Member*@
<tr>
<td>
    @Html.DropDownListFor(
                model => model.StaffVm.SalutationID,  
                Model.StaffVm.AvailableSalutations.Select(option => new SelectListItem
                {
                    Text = option.Desc.ToString(),
                    Value = option.Prm_SalutationID.ToString()
                }
        ),
        "Choose...")
</td>
<td>@Html.EditorFor(model => model.StaffVm.FName)</td>
<td>@Html.EditorFor(model => model.StaffVm.LName)</td>
<td>@Html.EditorFor(model => model.StaffVm.Active)</td>
</tr>

@*Update Existing Staff Members*@
@foreach (var staff in Model.ListStaffVms)
{
    <tr>
        <td>@Html.HiddenFor(model => staff.StaffID)@Html.ValueFor(model => staff.StaffID)  </td>
        <td>
            @Html.DropDownListFor(
                model => staff.SalutationID, staff.AvailableSalutations.Select(option => new SelectListItem
                    {
                        Selected = (option.Prm_SalutationID == staff.SalutationID),
                        Text = option.Desc.ToString(),
                        Value = option.Prm_SalutationID.ToString()
                    }
            ),
            "Choose...")
        </td>
        <td>@Html.EditorFor(model => staff.FName)</td>
        <td>@Html.EditorFor(model => staff.LName)</td>
        <td>@Html.EditorFor(model => staff.Active)</td>
        <td><a href="/Settings/[email protected](model => staff.StaffID)">Delete</a></td>
    </tr>
}

动作结果:

    public ActionResult UpdateStaff(StaffMembers list)
    {
        if (ModelState.IsValid)
        {
            foreach (var staffVm in list.ListStaffVms)
            {
                Prm_Staff staff = db.Prm_Staffs.Find(staffVm.StaffID);

                staff.SalutationID = staffVm.SalutationID;
                staff.FName = staffVm.FName;
                staff.LName = staffVm.LName;
                staff.Active = staffVm.Active;
            }
            db.SaveChanges();
            ViewBag.rtrn = "Successfully Updated.";
            return RedirectToAction("Parameters", new { param = "Staff Members", rtrn = ViewBag.rtrn });
        }
        else
        {
            ViewBag.rtrn = "Failed ! Please try again.";
            return RedirectToAction("Parameters", new { param = "Staff Members", rtrn = ViewBag.rtrn });
        }
    }

编辑:更新以显示最新更改

我认为您应该考虑更改ViewModel。还可以执行以下操作:

视图模型

public class Staff_VM
{
    public int ID { get; set; }
    public int SalutationID { get; set; }
    public string FName { get; set; }
    public string LName { get; set; }
    public bool Active { get; set; }
}
public class MyViewModel
{
    public Staff_VM StaffVm { get; set; } 
    public List<Staff_VM> ListStaffVms { get; set; }
    public List<Prm_Salutation> AvailableSalutations { get; set; }
}

Add_Update_Staff操作

     [HttpGet]
    public ActionResult Add_Update_Staff()
     {
        var model = new MyViewModel
        {
            ListStaffVms = (from a in db.Prm_Staffs
                            where a.Active == true
                            orderby a.LName ascending
                            select new Staff_VM
                            {
                                ID = a.Id,
                                SalutationID = a.SalutationID,
                                FName = a.FName,
                                LName = a.LName,
                                Active = a.Active
                            }),
           AvailableSalutations = (from p in db.Prm_Salutations
                                    where a.Active == true
                                   orderby p.Desc ascending
                                   select p).ToList()
        };
        return View(model);
    }

更新员工职位

    [HttpPost]
    public ActionResult Add_Update_Staff(MyViewModel model, string buttonType)
    {
        if (buttonType == "Insert")
        {
            if (ModelState.IsValid)
            {
                //save a new staff info
                return RedirectToAction("Index", "Home");
            }
        }
        if (buttonType == "Update")
        {
            foreach (var staffVm in model.ListStaffVms)
            {
                // update each record here
            }
            return RedirectToAction("Index", "Home");
        }
        model.AvailableSalutations = (from p in db.Prm_Salutations
                                      orderby p.Desc ascending
                                      select p).ToList();
        return View(model);
    }

视图

您可能需要添加验证以插入和更新人员信息

   @using (Html.BeginForm("Add_Update_Staff", "Staff"))
    {
        <tr>
            <td>
                @Html.DropDownListFor(
                    model => model.StaffVm.SalutationID, Model.AvailableSalutations.Select(option => new SelectListItem
                    {
                        Text = option.Desc.ToString(),
                        Value = option.Prm_SalutationID.ToString()
                    }
                        ), "Choose...")
            </td>
            <td>@Html.EditorFor(model => model.StaffVm.FName)</td>
            <td>@Html.EditorFor(model => model.StaffVm.LName)</td>
            <td>@Html.EditorFor(model => model.StaffVm.Active)</td>
        </tr>
        <input type="submit" value="Insert" name="buttonType" />

        for (int i = 0; i < Model.ListStaffVms.Count(); i++)
        {

            <tr>
                <td>@Html.HiddenFor(m => m.ListStaffVms[i].ID)@Html.ValueFor(m => m.ListStaffVms[i].ID)  </td>
                <td>
                    @Html.DropDownListFor(
                      m => m.ListStaffVms[i].SalutationID, Model.AvailableSalutations.Select(option => new SelectListItem
                        {
                            Selected = (option.Prm_SalutationID == Model.ListStaffVms[i].SalutationID),
                            Text = option.Desc.ToString(),
                            Value = option.Prm_SalutationID.ToString()
                        }), "Choose...")
                </td>
                <td>@Html.EditorFor(model => model.ListStaffVms[i].FName)</td>
                <td>@Html.EditorFor(model => model.ListStaffVms[i].LName)</td>
                <td>@Html.EditorFor(model => model.ListStaffVms[i].Active)</td>
                <td><a href="/Settings/[email protected](model => model.ListStaffVms[i].ID)">Delete</a></td>
                <hr />
            </tr>
        }
       <input type="submit" value="Update" name="buttonType" />
    }

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

了解可枚举和ViewModels

来自分类Dev

了解枚举和函数签名

来自分类Dev

可枚举和跳过

来自分类Dev

了解MVVM中的模型和ViewModel

来自分类Dev

具有可枚举属性的EditorTemplate的MVC 5 ViewModel

来自分类Dev

了解枚举器的枚举

来自分类Dev

方法的可枚举和延迟执行

来自分类Dev

了解python枚举

来自分类Dev

数组和可枚举之间是什么关系?

来自分类Dev

递归和递归可枚举语言有什么区别

来自分类Dev

可枚举/流与未来

来自分类Dev

可扩展枚举Java

来自分类Dev

可枚举。除了IEqualityComparer

来自分类Dev

可扩展枚举计划

来自分类Dev

可扩展枚举Java

来自分类Dev

可枚举的 foreach 扩展

来自分类Dev

枚举和枚举之间的区别

来自分类Dev

Ubuntu实用工具,可了解操作系统中运行的线程数和进程

来自分类Dev

使用可枚举的内置Ruby访问和操作嵌套数据

来自分类Dev

使用辅助方法和可枚举的Ruby返回html格式的对象

来自分类Dev

可枚举属性和自己的属性之间有什么区别吗?

来自分类Dev

使用可枚举的内置Ruby访问和操作嵌套数据

来自分类Dev

在Sitecore 8和Solr中对可枚举对象进行范围搜索

来自分类Dev

了解Vim中的可修改

来自分类Dev

非字典值可枚举

来自分类Dev

可枚举方法中的GroupBy

来自分类Dev

关于可枚举/列表的评估

来自分类Dev

可枚举方法中的GroupBy

来自分类Dev

如何从可枚举创建哈希?