假设我目前有一个Controller
,其中包含以下Action
:
public ActionResult Index() {
return View();
}
我想知道如果不是这样,我可能会有像
这样的东西 public ActionResult Index(MyModel model) {
return View();
}
模型以某种方式填充了存储在cookie中的数据。
答案 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);
}