C# Mvc3中的ModelBinding-通过表单post-如何持久化在操作之间重新创建模型
我有一个多步骤向导,我从有用的帖子拼凑而成,比如它有一些问题。。这是我的设置C# Mvc3中的ModelBinding-通过表单post-如何持久化在操作之间重新创建模型,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,我有一个多步骤向导,我从有用的帖子拼凑而成,比如它有一些问题。。这是我的设置 [Serializable] public class WizardModel { public IList<IStepViewModel> Steps { get; set; } public void Initialize() { Steps = typeof(IStepViewModel)
[Serializable]
public class WizardModel
{
public IList<IStepViewModel> Steps
{
get;
set;
}
public void Initialize()
{
Steps = typeof(IStepViewModel)
.Assembly
.GetTypes()
.Where(t => !t.IsAbstract && typeof(IStepViewModel).IsAssignableFrom(t))
.Select(t => (IStepViewModel)Activator.CreateInstance(t))
.ToList();
}
我的问题是,每次发布向导时,向导都是一个新对象,而我正试图在填充数组中的每个步骤时传递相同的模型。有人知道我哪里出了问题吗
这是模型绑定
Global.asax
ModelBinders.Binders.Add(typeof(IStepViewModel), new FormTest.Models.StepViewModelBinder());
及
提前谢谢
编辑:
如果我理解的话,使用会话的另一种方法是序列化我的模型(如下),并在我的控制器操作中反序列化。我在发布到控制器的模型上设置了值。。将返回到视图以进行下一步,依此类推。。直到最后一步,当我有一个向导模型填充每个步骤
Index.cshtml
@using (Html.BeginForm())
{
@Html.Serialize("wizard", Model);
etc...
}
所以我尝试在这里反序列化的向导参数
[Deserialize] WizardModel wizard,
每次通过控制器post操作都是一个新对象-我想看看这是否可以不使用Session but@Html.Serialize?和Post使用session在请求之间持久化对象
Session["SuperWizard"] = wizard
模型绑定用于将发布的表单值绑定到新对象。因此,如果您想要完全相同的对象,如Mike所建议的,则需要使用会话或其他持久存储。但是,如果每次都可以重新创建对象,那么您只需要在表单中放入足够的数据,以便在发布时,可以重新绑定所有数据,以在新对象中获得相同的值。这段代码最终完成了任务。在控制器动作中
var serializer = new MvcSerializer();
var value = Request["wizard"];
var wizard = (WizardModel)serializer.Deserialize(value, SerializationMode.Signed);
在我看来
@Html.Serialize("wizard", Model, SerializationMode.Signed);
谢谢你的回复。我想知道@Html.Serialize是否可以实现这一点?我在顶部添加了一些更多的信息。谢谢你,你所描述的在文章中放入足够数据的情况正是我想要实现的。基本上使用@Html.Serialize模型,我用更多信息更新了问题。
var serializer = new MvcSerializer();
var value = Request["wizard"];
var wizard = (WizardModel)serializer.Deserialize(value, SerializationMode.Signed);
@Html.Serialize("wizard", Model, SerializationMode.Signed);