首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在ASP.NET MVC中的HttpPost操作方法中加载对象的最佳方式

在ASP.NET MVC中的HttpPost操作方法中加载对象的最佳方式
EN

Stack Overflow用户
提问于 2011-07-14 08:13:03
回答 2查看 180关注 0票数 1

我使用的是ASP.NET MVC3和实体框架4.1。

我想知道当HTTP Post中没有提供所有属性时,更新对象的首选方法是什么。

例如,Order对象可能具有Items、CreateDate和UpdateDate属性。在编辑表单中,只会输入Items属性并将其发布到编辑ActionMethod。因此,下面的基本代码将失败,因为订单中没有包含CreateDate和UpdateDate属性。

代码语言:javascript
运行
复制
  [HttpPost]
    public ActionResult Edit(Order order)
    { 
        {

            db.Entry(order).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");

        }
        return View(order);
    }

处理这种情况的最佳方法是什么?对于像这样的简单对象,我认为CreateDate和UpdateDate可以保存在隐藏字段中,但是对于更复杂的对象(比如那些具有几个一对多关系的对象),应该使用对象id来检索整个对象,然后用表单中回发的值覆盖它的一些属性……

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-14 08:54:22

一种选择是创建视图模型

代码语言:javascript
运行
复制
public class OrderEditModel
{
   //properties used in the view
}

[HttpPost]
public ActionResult Edit(OrderEditModel orderEditModel)
{ 

    // map OrderEditModel to Order

    db.Entry(order).State = EntityState.Modified;
    db.SaveChanges();
    return RedirectToAction("Index");
}

您可以使用AutoMapper来映射它们

另一种选择是从数据库中检索对象并更新它

代码语言:javascript
运行
复制
[HttpPost]
public ActionResult Edit(string id)
{ 
    var order = db.Orders.FindByKey(id);

    UpdateModel(order);

    db.SaveChanges();
    return RedirectToAction("Index");
}
票数 1
EN

Stack Overflow用户

发布于 2011-07-14 08:48:55

在这种情况下,createdate和modifydate位于发布的表单(名为createDate和modDate)上的隐藏输入中,那么您可以按如下方式从请求表单集合中检索它们,即使它们不在Order对象上。

代码语言:javascript
运行
复制
[HttpPost]
public ActionResult Edit(Order order)
{ 
    var createdOn = this.Request.Form["createDate"];
    var editedOn = this.Request.Form["modDate"];

    db.Entry(order).State = EntityState.Modified;
    db.SaveChanges();
    return RedirectToAction("Index");
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6687128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档