C# MVC 5删除/排除退货模型的某些部分
我有很多[HttpPost]方法可以将数据返回到我的视图中。它们看起来都是这样的:C# MVC 5删除/排除退货模型的某些部分,c#,asp.net-mvc,C#,Asp.net Mvc,我有很多[HttpPost]方法可以将数据返回到我的视图中。它们看起来都是这样的: [HttpPost] public async Task<JsonResult> NewAction(Action model) { object[] data = new object[5]; if (ModelState.IsValid) { try { Case case = db.Cases.Find(
[HttpPost]
public async Task<JsonResult> NewAction(Action model)
{
object[] data = new object[5];
if (ModelState.IsValid)
{
try
{
Case case = db.Cases.Find(model.Case_ID);
model.Created = db.Users.Find(User.Identity.GetUserId());
model.Created_date = DateTime.Now;
model.Active = true;
case.Actions.Add(model);
await db.SaveChangesAsync();
data[0] = true;
data[1] = "Action added!";
data[2] = model;
}
catch (Exception ex)
{
data[0] = false;
data[3] = ex.Message;
data[4] = ex.InnerException != null ? ex.InnerException.Message : "No details";
}
}
else
{
string errors = string.Join("<br/>", ModelState.Values
.SelectMany(x => x.Errors)
.Select(x => x.ErrorMessage));
data[0] = false;
data[3] = "<b>Invalid input data</b>";
data[4] = errors;
}
return Json(data, JsonRequestBehavior.AllowGet);
}
[HttpPost]
公共异步任务NewAction(操作模型)
{
对象[]数据=新对象[5];
if(ModelState.IsValid)
{
尝试
{
Case=db.Cases.Find(model.Case\u ID);
model.Created=db.Users.Find(User.Identity.GetUserId());
model.Created_date=DateTime.Now;
model.Active=true;
case.Actions.Add(模型);
等待db.saveChangesSync();
数据[0]=真;
数据[1]=“添加了操作!”;
数据[2]=模型;
}
捕获(例外情况除外)
{
数据[0]=假;
数据[3]=例如消息;
数据[4]=ex.InnerException!=null?ex.InnerException.Message:“无详细信息”;
}
}
其他的
{
字符串错误=string.Join(“
”,ModelState.Values
.SelectMany(x=>x.Errors)
.选择(x=>x.ErrorMessage));
数据[0]=假;
数据[3]=“无效输入数据”;
数据[4]=错误;
}
返回Json(数据,JsonRequestBehavior.AllowGet);
}
因此,这里我在data[2]对象中返回模型,以便从中提取数据并将其放入表中。问题是,我必须返回创建的对象以获取用户的Firstname和LastName。但问题是,创建的对象是ApplicationUser对象,因此它还包括来自IdentityUser的字段,如PasswordHash、SecurityStamp等,我不想在响应中返回这些字段
所以。。是否有一种简单的方法可以仅排除/包括对象的某些部分?或者我必须创建一个新对象,并且只分配我想要返回的值吗?解决这类问题的一种流行方法是创建视图模型,用于表示视图所需的数据。然后使用类似于或的东西在域模型和视图模型之间进行映射(这将删除大量繁琐的代码)。这种方法还可以帮助您避免。您最好创建一个视图模型,该模型只表示要显示/编辑的属性,但也可以使用属性,并且应该避免为变量使用特殊名称,如
case
!嗯,没错。不过,对于new/edit/delete,将会有很多ViewModels,但我认为我最喜欢:)是的,实际上,我只是为了演示而重命名了它;)嗯,我唯一遇到的问题是,我必须创建一个新的动作对象,因为现在我发送的模型与数据库中的动作模型不匹配,所以我不能只将模型添加到数据库中。。因此,我必须将动作中的所有字段设置为与模型中的字段相等…:(