Model中的ASP.Net MVC HTTPRequestBase

时间:2015-12-23 13:11:58

标签: c# asp.net-mvc asp.net-mvc-4 model-binding

我有几个实现接口的模型。 我解决了这个问题,我需要一个ModelBinder来处理来自View的控制器类。

我现在想知道我应该在哪里设置模型的值。

我的BindModel方法目前看起来如下

public WrongItemsReceivedModel(HttpRequestBase request) : this()
{
    if (request != null) 
    {
        ModelNumberID = request.Form["ModelNumberID"];
        OrderNumber = request.Form["OrderNumber"];
        String squant = request.Form["QuantityAndSize.Quantity"];
        String selectedItem = request.Form["QuantityAndSize.SelectedItem"];

        decimal quantity = 0;
        Decimal.TryParse(squant,out quantity);
        m_QuantityAndSize.Quantity = quantity;
        m_QuantityAndSize.SelectedItem = selectedItem;
    }
}

并且WrongItemsReceivedModel看起来像这样

{{1}}

我的问题是:将初始化逻辑放在模型中是否可以,或者我应该在我写的ModelBinder中进行? 两者都有效,但最佳做法是什么?为什么?

1 个答案:

答案 0 :(得分:1)

最好在Binder中初始化您的模型,例如this article

目的是将您的模型类与UI技术分开。 HttpRequestBase是对模型的依赖。

例如,如果您想在不同技术之间共享代码并在移动应用程序或桌面应用程序中使用您的模型,则需要添加对System.Web的引用,这是不允许的(或在某些平台中不可能)。

即使您没有计划共享代码,您也可能希望在解决方案的不同项目中使用您的模型,并且每个项目都必须引用System.Web,这也不是好方案,因为轮到它可以参考你应用的非网页部分。