C# 在Asp.net mvc中维护viewstate?

C# 在Asp.net mvc中维护viewstate?,c#,asp.net,asp.net-mvc,viewstate,C#,Asp.net,Asp.net Mvc,Viewstate,使用webforms的主要原因之一是易于维护viewstate。我想构建一个asp.net mvc应用程序,那么我有哪些选项来维护viewstate ASP.NET MVC不使用传统意义上的ViewState(即在网页中存储控件的值)。相反,控件的值被发布到控制器方法。调用控制器方法后,如何处理这些值取决于您自己 ASP.NET MVC将保留控件的值足够长的时间,以便您验证它们,并(如果需要)将它们返回到页面进行编辑或更正。如果控件有效,则可以将其持久化到数据库或其他数据存储中,以便后续GET请

使用webforms的主要原因之一是易于维护viewstate。我想构建一个asp.net mvc应用程序,那么我有哪些选项来维护viewstate


ASP.NET MVC不使用传统意义上的ViewState(即在网页中存储控件的值)。相反,控件的值被发布到控制器方法。调用控制器方法后,如何处理这些值取决于您自己


ASP.NET MVC将保留控件的值足够长的时间,以便您验证它们,并(如果需要)将它们返回到页面进行编辑或更正。如果控件有效,则可以将其持久化到数据库或其他数据存储中,以便后续GET请求使用。

如果要创建向导样式的表单,则可以创建可序列化类以保留viewstate:

[Serializable]
public class MyWizard
{
    public string Field1 { get; set; }
    public string Field2 { get; set; }
}

然后,您可以序列化该类,并以与使用ViewState类似的方式使用它(作为表单中的隐藏字段)。

您可以通过使用序列化视图中的模型来模拟视图状态

您所要做的就是序列化模型并在视图中加密它

@Html.Serialize("Transfer", Model, SerializationMode.EncryptedAndSigned)
并在控制器中添加反序列化属性

public ActionResult Transfer(string id,[Deserialize(SerializationMode.EncryptedAndSigned)]Transfer transfer)

由于MVC框架的基本设计是将业务层与表示层分开,因此不允许通过HTTP保留状态


但是,Cookie、可序列化类、ViewData和ViewBag是在MVC中保留状态的好方法。

请参阅@Robert如果您不同意,最好讨论复制问题,而不是简单地覆盖编辑。如果您有大量内容要添加,请继续。否则,我已经发布了关于复制的评论。@Robert duplicates将被关闭,而不是发表评论。请参阅常见问题解答。创始人在他们的博客上明确了编辑的目的。它用于大量编辑,而不是大型交通标志。ASP.NET中的ViewState与MVC模型无关。ViewState包含控件的状态;不是模型对象的值。这已在MVC 5 Futures中删除,但您可以改用MvcSerializer.Serialize。看见