我在尝试学习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做尽可能多的客户端加载,因为我想删除尽可能多的回调服务器,所以我在想
然后我使用我的控制器的automapper来映射viewmodels,它允许我将订单插入我的实体框架。
这是正常的做事方式还是完全偏离轨道?
答案 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。