在MVC4 Controller中检索并将值从一个表附加到另一个表

时间:2013-08-21 06:33:00

标签: asp.net-mvc-4

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

1 个答案:

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

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