我有这个模型,
[Serializable]
public class userMaster
{
public Step1_userName userName { get; set; }
public Step2_userAddress userAddress { get; set; }
public Step3_userContact userContact { get; set; }
}
我在这个视图中对它进行序列化,
@Html.Hidden("RegMod",Model.Serialize())
然后我将数据发布回控制器操作
[HttpPost]
public ActionResult Step1(Step1_userName userName, string RegMod)
{
var model = (userMaster)RegMod.Deserialize();
model.userName = userName;
if (!ModelState.IsValid)
{
return View(model);
}
return View("Step2", model);
}
我在RegMod中获取数据,但它不会反序列化为对象。我得到的只是一个空(null)对象。我还向这个对象添加了新数据,并且工作正常。
这是Serialize / Deserialize类,
namespace MyMVCApplication
{
public static class ExtensionMethods
{
public static string Serialize(this object o)
{
var sw = new StringWriter();
var formatter = new LosFormatter();
formatter.Serialize(sw, o);
return sw.ToString();
}
public static object Deserialize(this string data)
{
if(String.IsNullOrEmpty(data))
return null;
var formatter = new LosFormatter();
return formatter.Deserialize(data);
}
}
}
有谁知道它为什么不反序列化,有更好的方法吗? 感谢。
答案 0 :(得分:0)
我将问题追溯到,
@Html.Hidden("RegMod",Model.Serialize())
隐藏的RegMod字段的值与序列化程序例程中的值不同。所以我尝试了这个,
<input type="hidden" value="@Model.Serialize()" name="RegMod" />
现在可行。
看起来HTML助手搞乱了数据。