Asp.net C#模型对象绑定

时间:2015-02-01 15:39:16

标签: c# asp.net

产品有一些无法更改的字段, 所以我想只用选定的字段绑定对象。

现在我正在做这个(下面)方式(比如手动绑定),但我相信有更好更干净的方式。如何将Model对象与只有选定字段的模型对象绑定?

[HttpPut]
public JsonResult update(Product editedProduct) {

    Product originalProduct = unitOfWork.ProductRepository.Get(filter: q => q.no == editedProduct.no).Single();

    originalProduct.name = editedProduct.name;
    originalProduct.modelNo = editedProduct.modelNo;
    originalProduct.size = editedProduct.size;
    originalProduct.color = editedProduct.color;
    originalProduct.description = editedProduct.description;
    originalProduct.price = editedProduct.price;

    //originalProduct.upc = editedProduct.upc; //UPC can not be changed
    //originalProduct.sku = editedProduct.sku; //SKU can not be changed

    unitOfWork.Save();

    return Json(new { success = true });

}

请告诉我,

3 个答案:

答案 0 :(得分:1)

好吧,不要这样做。

对于这种情况,您应该创建一个单独的ViewModel,只包含必要的字段。

答案 1 :(得分:1)

在我看来,这种方法绝对没有错。可以采用不同的方式做一些事情,但这并不意味着它会更好。

  • 创建一个DTO / ViewModel类来表示您接受并从服务返回的类。这样,如果需要,您可以拥有不同形状的数据。例如,您可以跳过安全关键字段。我认为这将是一种改进。
  • 使用AutoMapper之类的框架来完成对象之间的映射。这是非常流行的方法,但我个人更喜欢明确地复制字段。
  • 您可以在不检索对象的情况下更新对象。我假设您正在使用实体框架。您可以参考此问题了解详情 - How to update a record without selecting that record again in ADO.NET Entity Framework?。我个人认为这不会改善你的代码。我认为只有在当前方法遇到性能问题时才应该这样做。
  • 您可以使用Update方法将映射代码放在存储库中。
BTW看起来您的存储库目前无用。您只是在ORM周围编写一个包装器,这会使代码更复杂,更有问题。使用ORM时,存储库是一种反模式。您的ORM是存储库。

答案 2 :(得分:0)

我不会在类中公开setter。例如。

public class Product{
    public string upc {get;}
}

这不允许设置属性。