C# modelState中的Html.Serialize错误

C# modelState中的Html.Serialize错误,c#,asp.net,asp.net-mvc,asp.net-mvc-4,serialization,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Serialization,我正在尝试在asp.net mvc中创建向导注册表单(多步骤注册) 我有一个登录页面(带有一个初始字段:Name)。当我发布时,它会转到一个注册页并序列化名称字段(属于ViewModel Step1对象) 一切似乎都很顺利。我通常反序列化对象 该问题处于模型状态。它每次都无效,因为隐藏字段已序列化 它显示了隐藏字段的异常:“从类型'System.String'到类型'Project.ViewModels.Step1'的参数转换失败,因为没有类型转换器可以在这些类型之间转换。” 我做错了什么? 为

我正在尝试在asp.net mvc中创建向导注册表单(多步骤注册)

我有一个登录页面(带有一个初始字段:Name)。当我发布时,它会转到一个注册页并序列化名称字段(属于ViewModel Step1对象)

一切似乎都很顺利。我通常反序列化对象

该问题处于模型状态。它每次都无效,因为隐藏字段已序列化

它显示了隐藏字段的异常:“从类型'System.String'到类型'Project.ViewModels.Step1'的参数转换失败,因为没有类型转换器可以在这些类型之间转换。”

我做错了什么? 为什么ModelState试图验证我的隐藏字段

我的模型:

public class Wizard
{
    public Step1 Step1 { get; set; }
    public Step2 Step2 { get; set; }
}

public class Step1
{
    [Required]
    public string Name{ get; set; }
}

public class Step2
{
    [Required]
    public string Email { get; set; }
}
我的方法:

[HttpPost]
    public ActionResult Register (Wizard user, FormCollection form, [Deserialize] Step1 step1)
    {
        if (form["Step2Button"] != null)
        {
            if (ModelState.IsValid) //Is invalid every time
            {
                user.Step1 = step1;
                return View("RegisterFinal", user);
            }

            return View("Register", user);
        }
}
我的看法是:

@using (Html.BeginForm("Register", "User", FormMethod.Post))
{
    @Html.Serialize("Step1", Model.Step1)
    @Html.TextBoxFor(model => model.Step2.Email)
    <button name="Step2Button">Continue</button>
}
@使用(Html.BeginForm(“Register”、“User”、FormMethod.Post))
{
@序列化(“Step1”,Model.Step1)
@Html.TextBoxFor(model=>model.Step2.Email)
继续
}

谢谢

好的,我刚刚使用了ModelState。在验证之前在隐藏字段中删除