Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 4 在MVC4控制器中检索并将值从一个表追加到另一个表_Asp.net Mvc 4 - Fatal编程技术网

Asp.net mvc 4 在MVC4控制器中检索并将值从一个表追加到另一个表

Asp.net mvc 4 在MVC4控制器中检索并将值从一个表追加到另一个表,asp.net-mvc-4,Asp.net Mvc 4,我正在使用MVC4、EF5和MySQL。我有一个模板,当用户单击从视图到控制器的链接时,我想用它填充表a 表A模板(3条记录) 表A(可能存在属于其他用户的其他记录) 因此,我想附加一组新的3条记录作为模板,它将添加当前登录用户的UserId,以区别于其他用户记录。我不知道如何在控制器中实现这一点。如果你能帮忙,谢谢你 我想出了一些办法,但不确定这是否是最有效的方法 [HttpPost] [ValidateAntiForgeryToken] public ActionRe

我正在使用MVC4、EF5和MySQL。我有一个模板,当用户单击从视图到控制器的链接时,我想用它填充表a

表A模板(3条记录)

表A(可能存在属于其他用户的其他记录)

因此,我想附加一组新的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();
        } 

我根本不明白你的问题。。。!但是,在mvc 4应用程序的每个地方,您都可以通过以下行获取当前登录用户的用户名:

string uname = User.Identity.Name;
我认为您在视图中显示了一些
模板A
s,您希望将它们的值分配给选择它们的用户,并将所有这些数据填充到
表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();
} 

我仍然不知道这个方法的作用是什么。。。!然而,我认为这是您想要的…

您应该考虑更基于对象的方法。我看不出您想做什么,但是如果您有一个类(比如说上面的类),并且您想使用该类的对象作为下面的类的模板,那么您可以继承第一个类并向其添加属性。后一个对象应接受第一个对象作为构造函数参数。我建议你看一些教程来熟悉EF和ORM。@罗伯特,谢谢,我有模板a、B、C,所以登录用户可以选择任何模板。这些模板具有预先填充的公共值(3行,其中包含Title、Body和CountryId的值),作为用户构建的起点。类A中还有其他字段,用户将继续通过编辑而不是创建来构建。我认为您应该使用包含所有字段(公共字段和其他字段)的模板。创建时只显示公共字段,编辑时同时显示这两个字段。@vaibhavshah感谢您的建议。我现在有一个工作控制器动作来实现这一点。有没有更好的方法来实现这一点?谢谢,但我的问题是如何从模板a中检索所有记录并将所有记录添加到表a中,以便example@Diin-就像我说的,我不明白你想做什么。。。什么是模板A?A桌在哪里。。。???请尝试向我展示数据库中表的模型,以及您想要的输出…我已经用我提出的控制器代码编辑了我的原始问题,现在可以使用了。当登录用户选择模板(例如模板a)时,它会将模板的值复制到主模型(表a-这是所有用户的通用模型),并将登录用户ID添加到记录中。感谢添加检查,我将为您的问题打勾以帮助我
string uname = User.Identity.Name;
[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();
}