modelState中的Html.Serialize错误

时间:2014-06-23 05:58:59

标签: c# asp.net asp.net-mvc asp.net-mvc-4 serialization

我试图在asp.net mvc中创建一个向导注册表单(多步注册)。

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

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

问题出在ModelState中。它每次都无效,因为隐藏字段已序列化。

它显示了隐藏字段的异常:“从类型'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>
}

由于

1 个答案:

答案 0 :(得分:0)

好的,我在验证之前只在隐藏字段中使用了ModelState.Remove。