将ViewModel的内容传递给MVC3中索引的详细信息页面
问题描述:
在我的控制器内部,bazController
,我返回要在Index
页面上显示的bazViewModels
列表。将ViewModel的内容传递给MVC3中索引的详细信息页面
现在,当我点击bazViewModel
的Details
链接,每个项目上是有办法,我可以特定视图模型item
传递给Details
页面?
我可以通过URL从我的视图模型传递必要的数据,但我不想。
谢谢!
答
通常,您只会将某种ID发送到详细信息操作,例如,该链接看起来像/ products/details/15,以显示产品的详细信息,ID为17.然后,Detail操作将使用id作为关键字(例如从数据库或会话)获取所需的数据。
但是,您可以创建自己的模型绑定器,使这个自动发生,沿着这些线路:
public class MyModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var val = bindingContext.ValueProvider.GetValue("id");
var id = int.Parse(val.AttemptedValue);
return LoadFromDatabase(id);
}
}
所以你的行动可能看起来像:
public ViewResult Details(MyModel model)
{
return View();
}
答
使用TempData
从一个传递信息页面到其他页面,在使用该页面后将被清除
编辑: 也可以使用session
但确保会话使用后清除。
我的问题是其中一个字段是未知的,直到索引页面加载和'usertype'基于访问页面的用户帐户计算。 'usertype'由于其可变性质而不存储在数据库中。 – messedupfir 2012-02-29 15:33:28
然后你可以将它存储在会话中。无论是在固定的密钥下还是在动态创建的密钥下,您都可以通过详细信息查找适当的值。 – 2012-02-29 15:42:31