我正在使用MVC4,EF5和MySQL。我有一个模板,当用户点击从视图到控制器的链接时,我想填充表A.
表A模板(3条记录)
Title
Body
CountryId
表A(可能存在属于不同用户的其他记录)
Title
Body
CountryId
UserId
所以我想附加一组新的3条记录作为模板,它将添加当前登录用户的UserId以区别于其他用户记录。我不知道如何在控制器中实现这一点。谢谢,如果你能帮忙的话。
我想出了一些但不确定这是否是最有效的方法?
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult GetATemplate(int CountryId)
{
var userId = MySqlWebSecurity.GetUserId(User.Identity.Name);
var temps = db.ATemplates.ToList();
foreach (var temp in temps)
{
db.ATables.Add(new ATable()
{ Title = temp.Title,
CountryId=CountryId,
UserId= userId,
Body = temp.Body,
DatePosted = DateTime.Now
});
}
db.SaveChanges();
return View();
}
答案 0 :(得分:0)
我根本没有得到你的问题......!但是,在您的mvc 4应用程序中的每个位置,您都可以使用以下行获取当前登录用户的用户名:
string uname = User.Identity.Name;
我认为您在视图中显示了一些Template A
,并且您希望将其值分配给选择它们的用户,并将所有这些数据填充到Table A
中,对...?< / p>
行。为此,请更改您的操作方法,如下所示:
[HttpPost]
public ActionResult GetATemplate(int CountryId)
{
var userId = MySqlWebSecurity.GetUserId(User.Identity.Name);
var temps = db.ATemplates.Where(t => t.CountryId == CountryId).ToList();
foreach (var temp in temps)
{
if(!db.ATables.Any(a => a.UserId == userId && a.CountryId == temp.CountryId))
{
db.ATables.Add(new ATable()
{
Title = temp.Title,
CountryId = CountryId,
UserId = userId,
Body = temp.Body,
DatePosted = DateTime.Now
});
}
}
db.SaveChanges();
return View();
}
我仍然不知道这种方法的作用......!但是我认为这就是你想要的......