我在这里搜了很多次,但找不到我想要的东西。 我正在开发一个应用程序,其中我有具有特定技能的用户,我想将它们与特定项目联系起来。
所以我有以下表格: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);
}
我希望我已经解释得很好,并提前感谢你。
答案 0 :(得分:0)
我和你有同样的情况。 我被选中用来增加用户的技能。恕我直言,它更加用户友好,然后使用复选框(当您在数据库中拥有超过20种技能时,您可以在链接中选择,当您添加技能时)。 选择是常规HTML&#34;选择&#34;标签具有多个属性但更美观。 我还使用Ajax JQuery将我的数据发布到控制器。
JQuery POST方法还支持使用附件发送表单数据。 因此,您不需要经常更改“编辑”操作。你需要的是为所选技能添加参数(它是一个用逗号分隔的字符串)。