我试图在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>
}
由于
答案 0 :(得分:0)
好的,我在验证之前只在隐藏字段中使用了ModelState.Remove。