1

我需要一些帮助来理解!

我想了解如何最好地让我的 asp 控制器使用模型绑定。基本上,我想在我的会话中引用主对象(购物车)的某些内容,并且我的用户将以他们请求的形式编辑模型(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);
        }

如果我希望用户与诸如 editingModel2 之类的其他事物进行交互,我是否也应该将其放入购物车

希望这能解释我的问题!

感谢您的帮助

4

1 回答 1

0

我会放弃自定义模型活页夹。ASP.NET 的默认模型绑定器与强类型Html.____For控件的功能相结合非常强大,应该加以利用。

我假设 aCart本质上是一个包含在包含一些元数据的类中的列表。我要做的是创建一个包含表单和for控件的强类型视图,以编辑包含您感兴趣的数据的对象。让我们将此对象类型称为MyItem。然后,将表单提交给一个控制器,该控制器将采用 type 的参数MyItem。此参数将填充表单中的数据。然后你可以做的是使用Session变量来访问cart对象,以及MyItem它的类型对象。

总的来说,这需要很少的逻辑,因为大部分都直接融入了 MVC 框架。在控制器中处理这个问题,可能会根据您的架构使用帮助程序类,并将模型绑定的担忧留给 MVC。


不要使用隐藏字段!你不需要它们。我认为您可能不理解的是,当您Session在 MVC 中拥有变量时,您实际上是在使用它,就好像它是单个用户的单个会话一样。如果您Session["MyCart"]在会话中使用代码访问购物车,则运行该代码的用户将自动访问他或她的购物车。这是因为会话唯一性由 MVC 以安全的方式自动管理。作为开发人员,您无需担心用户访问与其对应的服务器端项目。只需将它们放在会话中,MVC 会处理其余的事情,确保用户只能访问属于他们的会话数据。

于 2012-12-08T18:34:18.737 回答