复杂视图中的CheckBoxList

时间:2015-02-07 15:10:31

标签: c# asp.net-mvc entity-framework asp.net-mvc-4 razor

我在这里搜了很多次,但找不到我想要的东西。 我正在开发一个应用程序,其中我有具有特定技能的用户,我想将它们与特定项目联系起来。

所以我有以下表格:Users,UserSkills等 我的问题是:我在MVC4中使用CRUD,当我从UserDetail Controller打开EDIT视图时,为了编辑用户信息,我还需要添加(在相同的Edit视图中)局部视图或任何机制,我列出了用户技能,使用CheckBoxes帮助多用户选择各种技能,然后按“保存”时,应将用户和用户技能信息存储回dB(MS-SQL)。

我正在使用此模型:

public class SkillsViewModel
    {
        public IList<Skill> AvailableSkills { get; set; }
        public IList<Skill> SelectedSkills { get; set; }
        public SavedSkills SevedSkills { get; set; }
        public User Usr { get; set; }
    }

SavedSkills是UserSkills表,将用于dB AvailableSkills是技能表 SelectedSkills是在编辑视图

中选择的

请记住,编辑视图还包含图像上传文件:

[HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit(User Usr, HttpPostedFileBase file)
        {
            #region//validate file is selected
            if (file != null)
            {
                if (file.ContentLength > (512 * 1000)) // 512 KB
                {
                    ModelState.AddModelError("FileErrorMessage", "File size 
                             must be within 512KB");
                }
                string[] allowedType = new string     
                          []"image/png", "image/gif", 
                              "image/jpg", "image/jpeg" };
                bool isFileTypeValid = false;
                foreach (var i in allowedType)
                {
                    if (file.ContentType == i.ToString())
                    {
                        isFileTypeValid = true;
                        break;
                    }
                }
                if (!isFileTypeValid)
                {
                    ModelState.AddModelError 
                       ("FileErrorMessage", "Only .png, 
                            .gif and .jpg file allowed");
                }
            }
            #endregion
            if (ModelState.IsValid)
            {
                if (Skk.Skk.Count (x => x.IsSelected) == 0)
                {
                    //return "You have not selected any City";
                }
                else
                {
                    StringBuilder sb = new StringBuilder();
                    sb.Append("You selected - ");
                    foreach (Skill skilll in Skk.Skk)
                    {
                        if (skilll.IsSelected)
                        {
                            sb.Append(skilll.SkillName + ", ");
                        }
                    }
                    //sb.Remove(sb.ToString().LastIndexOf(","), 1);
                    //return sb.ToString();
                }


                //Update User
                if (file != null)
                {
                    string savePath = Server.MapPath("~/Pictures");
                    string fileName = Guid.NewGuid() + Path.GetExtension
                             (file.FileName);
                    file.SaveAs(Path.Combine(savePath, fileName));
                    Usr.ImagePath = fileName;
                }


                using (dBEntities dc = new dBEntities())
                {
                    var v = dc.Users.Where(a => a.Id.Equals
                            (Usr.Id)).FirstOrDefault();
                    if (v != null)
                    {
                        v.UserName = Usr.UserName;
                        v.Email = Usr.Email ;
                        v.StartDate = Usr.StartDate ;
                        v.Company = Usr.Company ;
                        v.Position = Usr.Position;
                        v.Division = Usr.Division ;
                        v.Department = Usr.Department ;
                        v.PM = Usr.PM ;
                        v.AM = Usr.AM;
                        v.Permissions = Usr.Permissions;
                        v.IsActive = Usr.IsActive;
                        if (file != null)
                        {
                            v.ImagePath = Usr.ImagePath ;
                        }
                    }
                    dc.SaveChanges();
                }
                return RedirectToAction("Index");
            }
            ViewBag.Department = new SelectList
                   (db.Departments, "DepID", "DepName", Usr.Department);
            ViewBag.Division = new SelectList
                  (db.Divisions, "DivID", "DivName", Usr.Division);
            ViewBag.Position = new SelectList
                  (db.Positions, "PosID","PosName", Usr.Position);
            return View(Usr);
        }

我希望我已经解释得很好,并提前感谢你。

1 个答案:

答案 0 :(得分:0)

我和你有同样的情况。 我被选中用来增加用户的技能。恕我直言,它更加用户友好,然后使用复选框(当您在数据库中拥有超过20种技能时,您可以在链接中选择,当您添加技能时)。 选择是常规HTML&#34;选择&#34;标签具有多个属性但更美观。 我还使用Ajax JQuery将我的数据发布到控制器。

JQuery POST方法还支持使用附件发送表单数据。 因此,您不需要经常更改“编辑”操作。你需要的是为所选技能添加参数(它是一个用逗号分隔的字符串)。