是否有内置的方法从Cookie中填充模型中的值?

时间:2011-02-15 01:23:39

标签: c# .net asp.net asp.net-mvc asp.net-mvc-3

假设我目前有一个Controller,其中包含以下Action

    public ActionResult Index() {

        return View();
    }

我想知道如果不是这样,我可能会有像

这样的东西
    public ActionResult Index(MyModel model) {

        return View();
    }

模型以某种方式填充了存储在cookie中的数据。

2 个答案:

答案 0 :(得分:2)

您可以编写一个自定义模型绑定器,它将填充Cookie中的视图模型:

public class MyModelCookiesModelBinder : DefaultModelBinder
{
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var cookie = controllerContext.HttpContext.Request.Cookies["someCookie"];
        MyModel myModel = GetModelFromCookie(cookie);
        return myModel;
    }

    private MyModel GetModelFromCookie(HttpCookie cookie)
    {
        // TODO:
        throw new NotImplementedException();
    }
}

然后在Application_Start注册:

ModelBinders.Binders.Add(typeof(MyModel), new MyModelCookiesModelBinder());

最后你可以:

public ActionResult Index(MyModel model) 
{
    return View();
}

将从cookie中填充模型。

答案 1 :(得分:1)

不。它必须是[HttpPost]动作。

[HttpPost]
public ActionResult Index(MyModel model)
{
 ...
 ...
 ...
}

据我所知,如果你没有指定属性,[HttpGet]是默认的,只能采用简单的值类型。

public ActionResult Index(int id)
{
     MyModel model = dataLayer.getModel(id);
     return View(model);

}