无法使Serialize HtmlHelper工作

时间:2011-03-10 07:10:42

标签: c# asp.net-mvc-2

我看了看:http://weblogs.asp.net/shijuvarghese/archive/2010/03/06/persisting-model-state-in-asp-net-mvc-using-html-serialize.aspx

但是当我发布页面时,模型(即人)返回为空?

    [HttpPost]
    public ActionResult Edit([DeserializeAttribute]Person person, FormCollection formCollection)
    {

//此行有错误:             TryUpdateModel(person,formCollection.ToValueProvider());

        return View(person);

    }


    <% using (Html.BeginForm("Edit", "Home"))
   {%>
<%=Html.Serialize("person", Model)%>
<%=Html.EditorForModel() %>
<button type="submit">
    go</button>
<%
    }%>

 [Serializable]
public class Person
{
    public string name { get; set; }
    public string suburb { get; set; }
}

1 个答案:

答案 0 :(得分:0)

为什么要尝试使用以下内容绑定请求中的人:

TryUpdateModel(person, formCollection.ToValueProvider());

当你明确知道请求中没有这样的东西时?该行调用模型绑定器并尝试从请求值中读取它。但在您的表单中,您只有一个隐藏字段。所以你的行动应该是这样的:

[HttpPost]
public ActionResult Edit([DeserializeAttribute]Person person)
{
    // Do something with the person object that's passed as
    // action argument
    return View(person);
}

此外,您的方案看起来很奇怪。您有一个看似强烈类型的视图,对于您使用Person的{​​{1}}对象,这意味着您正在为用户提供编辑这些值的可能性。如果序列化模型,您将在控制器操作中获得旧值。只有当您希望在多个请求之间保留某个模型但表单中没有相应的输入字段以便默认模型绑定程序可以在POST操作中重建实例时,此属性才有用。