Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Mvc3中的ModelBinding-通过表单post-如何持久化在操作之间重新创建模型_C#_Asp.net Mvc 3 - Fatal编程技术网

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);