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=0代码>etc,因为您保存的是模型
,而不是AddFlat
,构造函数是否会为EntityFramework
生成的模型工作?你所说的(顺便说一句,它应该被命名为addFlat)
是什么意思?这要看情况而定。如果您先使用代码,这不是问题。模型第一,数据库第一,我不知道。在后两种情况下,您可能都可以将默认值添加到模型或数据库中。AboutaddFlat
。对局部变量使用camelCase是常见的做法。谢谢。我选择了这个作为答案。