Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.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
C# MVC 5删除/排除退货模型的某些部分_C#_Asp.net Mvc - Fatal编程技术网

C# MVC 5删除/排除退货模型的某些部分

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]方法可以将数据返回到我的视图中。它们看起来都是这样的:

[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,但我认为我最喜欢:)是的,实际上,我只是为了演示而重命名了它;)嗯,我唯一遇到的问题是,我必须创建一个新的动作对象,因为现在我发送的模型与数据库中的动作模型不匹配,所以我不能只将模型添加到数据库中。。因此,我必须将动作中的所有字段设置为与模型中的字段相等…:(