C# 使用从控制器手动添加的某些字段添加记录

C# 使用从控制器手动添加的某些字段添加记录,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我正在尝试使用asp.net mvc 4和EF 6创建一个网站,在那里我想使用.add(model)添加一条记录。但我有一些字段,其中数据只需要从控制器手动输入。我需要手动输入这些字段&其余字段使用.Add()。但是我得到了验证错误,因为没有添加手动字段。这是我的密码 控制器 [HttpPost] public ActionResult Create(FlatManagement FlatTable) { FlatInfo model = FlatTable.Flat; if (

我正在尝试使用
asp.net mvc 4
EF 6
创建一个网站,在那里我想使用
.add(model)
添加一条记录。但我有一些字段,其中数据只需要从控制器手动输入。我需要手动输入这些字段&其余字段使用
.Add()
。但是我得到了验证错误,因为没有添加手动字段。这是我的密码

控制器

[HttpPost]
public ActionResult Create(FlatManagement FlatTable)
{
    FlatInfo model = FlatTable.Flat;
    if (ModelState.IsValid)
    {
        var getUser = db.Clients.Where(a => a.username == User.Identity.Name).FirstOrDefault();
        FlatInfo AddFlat = new FlatInfo();
        AddFlat.admin_id = getUser.serial;
        AddFlat.user_id = 0;
        AddFlat.user_name = "N/A";
        AddFlat.user_phone = "N/A";
        db.FlatInfoes.Add(model);
        db.SaveChanges();
     }
     return View();
}

我如何手动添加一些字段,而其他字段只需使用
.add()
方法即可添加?我不想为3-4个字段手动添加所有字段,因为有很多字段。如果有人能给我一个解决方案,那将是一个救命稻草。谢谢。

我很确定您遇到的问题是因为您忘记了在添加后保存更改

db.FlatInfoes.SaveChanges();

可以在类的构造函数中初始化字段:

public class FlatInfo 
{
    public FlatInfo()
    {
        user_id=0;
        user_name = "N/A";
        user_phone = "N/A";
        // and so on    
    }   
}

在控制器中,您只需设置
AddFlat.admin\u id
(顺便说一句,它应该被命名为
AddFlat

您当前的方法创建了一个
FlatInfo
的新实例

FlatInfo AddFlat = new FlatInfo();
设置它的一些属性,但是你永远不会对它做任何事情。由于您保存了
FlatInfo
的实例,该实例是
FlatTable
的一个属性,因此您需要更新该实例

[HttpPost]
public ActionResult Create(FlatManagement FlatTable)
{
    FlatInfo model = FlatTable.Flat; // this is the instance you need to update
    if (ModelState.IsValid)
    {
        var getUser = db.Clients.Where(a => a.username == User.Identity.Name).FirstOrDefault();
        model.admin_id = getUser.serial;
        model.user_id = 0;
        model.user_name = "N/A";
        model.user_phone = "N/A";
        db.FlatInfoes.Add(model);
        db.SaveChanges();
     }
     return View();
 }

事实上我在那里做了。我只是没有在这里加上。更新了我的帖子。对不起!可能是我瞎了,我看到你在向FlatInfoes添加模型,你在哪里向“模型”添加手动字段admin\u id、user\u id等?手动字段不应该添加到
model
中吗?因为我使用的是同一个对象
FlatInfo()
?你创建了一个新对象“AddFlat”,所有手动字段都会转到它。“model”指向“FlatTable.Flat”。“AddFlat”和“FlatTable.Flat”在这里不是不同的对象吗?“FlatTable.Flat”在“FlatManagement”模型中是
publicFlatInfo平面{get;set;}
。AddFlat&FlatTable。两个Flat都指向同一个对象。您可以使用
FlatInfo AddFlat=new FlatInfo()创建一个新的
FlatInfo
对象
并设置它的一些属性,但您从未对其执行任何操作。您所做的只是保存从视图发布的原始
FlatInfo
对象。我怀疑你想要的是
model.admin\u id=getUser.serial;model.user_id=0etc,因为您保存的是
模型
,而不是
AddFlat
,构造函数是否会为
EntityFramework
生成的模型工作?你所说的
(顺便说一句,它应该被命名为addFlat)
是什么意思?这要看情况而定。如果您先使用代码,这不是问题。模型第一,数据库第一,我不知道。在后两种情况下,您可能都可以将默认值添加到模型或数据库中。About
addFlat
。对局部变量使用camelCase是常见的做法。谢谢。我选择了这个作为答案。