绑定视图模型并将数据插入到控制器中

时间:2011-02-15 04:04:55

标签: asp.net-mvc asp.net-mvc-3

我在尝试学习mvc时遇到了障碍。我正在采用mvvm方法,因为我认为这适合我。

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

我的数据库包含3个表

dbo.Product
ProductID
ProductName

db.Order
OrderID
OrderDate
ProductOrderID

db.OrderProducts
OrderID
ProductID
QuantityOrdered

我使用实体框架。我会创建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的部分视图,以绑定可用的productname和productID 3.然后我将局部视图加载到视图中。
  3. 在我的CreateOrder视图中创建绑定到ProductID和QuantityOrdered
  4. 的2个隐藏字段
  5. 使用jquery将所选产品下拉列表中的值和数量文本框中的值传递到隐藏字段中,使用一个按钮将每个项目ID和数量分隔为一个简单的“,”之后我添加清除这些值,准备下一个项目为加入。
  6. 然后我使用我的控制器的automapper来映射viewmodels,它允许我将订单插入我的实体框架。

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

2 个答案:

答案 0 :(得分:0)

1听起来更直接,而且javascript代码更少。

我喜欢jquery和javascript,但尽可能少写。与VS的javascript编辑器和Firebug或其他任何东西相比,C#和VisualStudio是非常强大的开发工具。

此外,automapper最适合用于Domain / Model / BusinessObject(无论我们现在称之为什么;))而不是另一个方向。


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

答案 1 :(得分: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。我认为MVC3支持开箱即用的JSON模型绑定,但我不是100%肯定,因为我还在使用2.0。