2011-02-15 45 views
0

我试图学习mvc时遇到了一个障碍。我正在采取mvvm方法,因为我认为这适合我。绑定viewmodels并插入获取数据到控制器

如果您想到允许客户订购产品的网站。

我的数据库中包含3个表

 
dbo.Product 
ProductID 
ProductName 

db.Order 
OrderID 
OrderDate 
ProductOrderID 

db.OrderProducts 
OrderID 
ProductID 
QuantityOrdered 

我用的是实体framwork。我不是创造2周的ViewModels

OrderViewModel,看起来像

public class OrderViewModel 
{  
    public Order Order { get; set; } 
    public List<ProductOrderViewModel> AddedProducts { get; set; } 
} 

,比第二个这样的事情。

public class ProductOrderViewModel  
{   
public int OrderID { get; set; 
public List<Product> Products { get; set; }   
public int QuantityOrdered { get; set; } 
} 

我想使用jQuery做尽可能多的客户方的负载尽可能我想删除尽可能多地调用回服务器尽可能所以我想

  1. 创建一个视图,其强烈键入到OrderViewModel可以称之为CreateOrder
  2. 使用下拉列表创建基于我的ProductOrderViewModel的局部视图,以绑定可用的产品名和产品ID 3.然后将局部视图加载到视图中。
  3. 绑定到的ProductID我CreateOrder视图中创建2个隐藏字段和QuantityOrdered
  4. 使用jQuery通过从所选择的产品下拉值和数量文本框成使用按钮分隔每个项目ID和数量用一个简单的“隐藏的字段,“在此之后,我添加清楚这些值准备添加下一个项目。

然后我用我的控制器自动映射器来映射视图模型,它允许我将订单插入我的实体框架。

这是做事情的正常方式还是我完全偏离轨道?

回答

0

我会采取与jfar相反的方法,因为我不介意使用Javascript。检出Knockout.JS。它是浏览器中的MVVM(silverlight/wpf样式绑定)实现。 shopping cart example应该给你一个很好的起点。我倾向于将这种方法用于任何涉及列表操作或计算字段的客户端编辑。它也适用于用户需要一次编辑多个项目的情况。

如果您不采用这种方法,我建议添加到您的解决方案。使用JQuery的.data() API或全局变量*将值作为JSON传递,而不是逗号分隔值。维护人员想要看到的最后一件事情是代码中的模糊数组或代码.split(',')。我正在处理看起来像这样的代码,它不漂亮。

*你可以挂命名空间关闭jQuery对象:

$.my_stuff = $.my_stuff || {}; 
$.my_stuff.foo = { id : 1, quantity: 42 }; 

编辑:这里是how to use Knockout with MVC。我认为JSON模型绑定在MVC3中是支持开箱即用的,但我仍然不能100%确定,因为我仍然使用2.0。

0

1听起来更直接,更少的JavaScript代码。

我喜欢jQuery和JavaScript,但尽可能少地写。与VS的javascript编辑器和Firebug相比,C#和VisualStudio是非常强大的开发工具。

此外,automapper最好用于从Domain/Model/BusinessObject(不管我们今天称为他们;))而不是其他方向。


将它们存储在隐藏的表单字段中。

+0

嗨jfar,对不起,我编辑了我的文章。尝试使它有一定道理。我只是不确定应该如何或在哪里存储ProductID和QuantityOrdered。 – 2011-02-15 04:27:07

+0

好吧,那么如何构建jquery中的Products和QuantityOrdered列表以传递回控制器? – 2011-02-15 07:03:03

相关问题