【发布时间】:2011-09-03 04:02:13
【问题描述】:
我在我的一个视图中使用帮助器 Html.Serialize 来序列化一个对象,然后我在我的控制器中使用 MvcSerializer 再次反序列化它,如下所示:
(RegistrationViewModel) new MvcSerializer().Deserialize(serializedObject);
这在之前运行良好,但在升级到 MVC3(和 MVC3 期货)之后,Deserialize 方法发生了变化,现在它多了一个参数:SerializationMode。
我可以设置为Signed 或EncryptedAndSigned。
无论我使用哪一个,我都会收到SerializationException,要求我验证数据是否以我尝试反序列化的相同模式进行序列化。
在我看来,由于某种原因,IntelliSense 不适用于 Serialize 方法,所以我不知道这是否也有任何额外的重载。
但问题很简单:我现在如何在MVC3 中反序列化我在视图中使用Html.Serialize 序列化的控制器内的数据?
编辑 - 添加一些代码
来自控制器
private RegistrationViewModel 注册账户;
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
var serialized = Request.Form["regData"];
if (serialized != null)
{
registeredAccount = (RegistrationViewModel) new MvcSerializer().Deserialize(serialized, SerializationMode.EncryptedAndSigned);
TryUpdateModel(registeredAccount);
}
else
registeredAccount = (RegistrationViewModel)TempData["regData"] ?? new RegistrationViewModel();
}
public ActionResult Index()
{
if (Request.Form["nextButton.x"] != null)
return RedirectToAction("Details");
return View(registeredAccount);
}
从视图(序列化调用在表单的开头)
@model VektNed.Models.RegistrationViewModel
...
<div class="BodyContainer RegistrationBody">
@using (Html.BeginForm()){
@Html.Serialize("regData", Model, SerializationMode.EncryptedAndSigned)
<div class="RegistrationGroup">
<p class="Description">e-posten din benyttes som brukernavn for å logge inn.</p>
<p><label for="Account_Email">e-post</label> @Html.EditorFor(x => x.Account.Email)<span class="ErrorMessage"></span></p>
<p><label for="RepeatEmail">gjenta e-post</label> <input type="text" name="RepeatEmail" id="RepeatEmail" /><span class="ErrorMessage"></span></p>
<p><label class="CheckboxLabel" for="ShareEmail">del din e-post med andre brukere. </label> @Html.EditorFor(x => x.Account.ShareEmail)</p>
</div>
<div class="RegistrationGroup">
<p><label for="Account_FirstName">fornavn</label> @Html.EditorFor(x => x.Account.FirstName)<span class="ErrorMessage"></span></p>
<p><label for="Account_LastName">etternavn</label> @Html.EditorFor(x => x.Account.LastName)<span class="ErrorMessage"></span></p>
</div>
<div class="RegistrationGroup">
<p><label for="Password">ønsket passord</label> @Html.EditorFor(x => x.Password)<span class="ErrorMessage"></span></p>
<p><label for="ConfirmPassword">gjenta passord</label> <input type="password" name="ConfirmPassword" id="ConfirmPassword" /><span class="ErrorMessage"></span></p>
</div>
<div class="RegistrationGroup">
<input class="NextAlone" name="nextButton" type="image" src="../../Images/button_next.png" alt="Neste" />
</div>
}
</div>
...
【问题讨论】:
标签: c# .net asp.net-mvc-3 serialization deserialization