0

我正在使用 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();
        } 
4

1 回答 1

0

完全没听懂你的问题……!但是,在您的 mvc 4 应用程序中的每个位置,您都可以使用以下行获取当前登录用户的用户名:

string uname = User.Identity.Name;

我认为您Template A在视图中显示了一些 s 并且您希望将它们的值分配给选择它们的用户,并将所有这些数据填充到Table A中,对吧...?

好的。为此,请更改您的操作方法,如下所示:

[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();
} 

我仍然不知道这种方法的作用......!但是我认为这是您想要的...

于 2013-08-21T08:30:42.500 回答