模型中的ASP.Net MVC HTTPRequestBase
本文关键字:MVC HTTPRequestBase Net ASP 模型 | 更新日期: 2023-09-27 18:28:01
我有几个实现接口的模型。我计算出,当它来自View时,我需要一个ModelBinder来在我的控制器类中处理它。
我现在想知道我应该在哪里设置我的模型的值。
我的BindModel方法目前看起来如下
public object BindModel(ControllerContext controllerContext, System.Web.Mvc.ModelBindingContext bindingContext)
{
string type = controllerContext.HttpContext.Request.Form["ModelName"];
if (type == null)
{
throw new MissingFieldException("ModelName wasn't found");
}
type = type.Substring(type.LastIndexOf('.') + 1);
HttpRequestBase request = controllerContext.HttpContext.Request;
switch (type)
{
case "MissingDeliveryNoteNumberModel":
MissingDeliveryNoteNumberModel mdnnModel = new MissingDeliveryNoteNumberModel(request);
return mdnnModel;
case "MissingCardBoxModel":
MissingCardBoxModel mcbModel = new MissingCardBoxModel(request);
return mcbModel;
case "WrongItemsReceivedModel":
WrongItemsReceivedModel wirModel = new WrongItemsReceivedModel(request);
return wirModel;
default:
return null;
}
}
WrongItemsReceivedModel看起来像这个
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;
}
}
我的问题是:可以将初始化逻辑放在Model中吗?还是应该在我编写的ModelBinder中进行?两者都有效,但什么是最佳实践,为什么?
最好像本文中那样在Binder中初始化模型。
其目的是将模型类与UI技术分离。HttpRequestBase是模型中应防止的依赖项。
例如,如果你想在不同的技术之间共享代码,并在移动应用程序或桌面应用程序中使用你的模型,你需要添加对System.Web的引用,这是不可接受的(或在某些平台中是不可能的)。
即使您不打算共享代码,您也可能希望在解决方案的不同项目中使用您的模型,并且每个项目都必须引用System.Web,这也不是一个好的方案,因为这些项目反过来可以引用到应用程序的非Web部分。