我的理解需要一些帮助!
我想了解我的asp控制器如何最好地使用模型绑定。基本上我想在我的会话中有一个引用到主对象(cart)的东西,我的用户将以他们请求的形式编辑模型(editingModel1)。
基本上我想要有这样的课程:
public class customModelBinder : IModelBinder {
private const string sessionKey = "Cart";
public object BindModel(ControllerContext controllerContext,
ModelBindingContext bindingContext) {
// get the Cart from the session
Cart cart = (Cart)controllerContext.HttpContext.Session[sessionKey];
// create the Cart if there wasn't one in the session data
if (cart == null) {
cart = new Cart();
controllerContext.HttpContext.Session[sessionKey] = cart;
}
// return the cart
return cart;
}
}
并在我的控制器中使用它
public ActionResult Edit(int id, Cart cb)
{
Company c = _companyProvider.Read(id);
cb.editingModel1 = c
return View(c);
}
如果我希望用户与editModel2之类的其他内容进行互动,我是否也应将其放入购物车
希望这能解释我的问题!
感谢您的帮助
答案 0 :(得分:0)
我会放弃自定义模型绑定器。 ASP.NET的默认模型绑定器与强类型Html.____For
控件的强大功能相结合,功能非常强大,应该充分利用。
我假设Cart
本质上是包含在包含一些元数据的类中的列表。我要做的是创建一个包含表单和for
控件的强类型视图,以编辑包含您感兴趣的数据的对象。让我们调用此对象类型MyItem
。然后,将表单提交给控制器,该控制器将采用类型MyItem
的参数。此参数将填充表单中的数据。然后你可以使用Session
变量来访问cart
对象,并使用类型为MyItem
的对象。
总的来说,这需要很少的逻辑,因为大多数逻辑都直接进入MVC框架。在控制器中处理它,可能使用帮助程序类,具体取决于您的体系结构,并且不必担心模型绑定到MVC。
不要使用隐藏字段!你不需要它们。我认为您可能不理解的是,当您在MVC中拥有Session
变量时,您实际上就是使用它,就好像它是单个用户的单个会话一样。如果您使用代码Session["MyCart"]
来访问会话中的购物车,则运行该代码的用户将自动访问他或她的购物车。这是因为会话unicity由MVC以安全的方式自动管理。作为开发人员,您无需担心用户访问与其对应的服务器端项目。只需将它们放入会话中,MVC就可以处理其余事务,确保用户只能访问属于它们的会话数据。