asp.net c#MVC:没有ViewState我该如何生活?

asp.net c#MVC:没有ViewState我该如何生活?,c#,asp.net-mvc,viewstate,C#,Asp.net Mvc,Viewstate,我正在考虑将WebForms转换为MVC: 在.NETMVC中,什么概念使ViewState成为不需要的东西 是否将表格发回iteself等(即发回)?页面/用户控件如何保持其状态 为了保持某种状态而不诉诸会话状态,人们使用了哪些技巧 当然,完全无状态的环境不可能存在?状态是数据库中的模型。您可以小心地缓存数据库以减少页面加载时间。viewstate只是一个大而丑陋的隐藏表单字段 写出自己隐藏的表单字段,必要时对其进行加密 幸运的是,不再有任何简单的方法可以将大量数据转储到页面中,因此您必须明智

我正在考虑将WebForms转换为MVC:

在.NETMVC中,什么概念使ViewState成为不需要的东西

是否将表格发回iteself等(即发回)?页面/用户控件如何保持其状态

为了保持某种状态而不诉诸会话状态,人们使用了哪些技巧


当然,完全无状态的环境不可能存在?

状态是数据库中的模型。您可以小心地缓存数据库以减少页面加载时间。

viewstate只是一个大而丑陋的隐藏表单字段

写出自己隐藏的表单字段,必要时对其进行加密


幸运的是,不再有任何简单的方法可以将大量数据转储到页面中,因此您必须明智地选择要保存的内容。

但当然可以。事实上,网络是无状态的。事实上,任何与此相反的想法都是反常的

Web控件在MVC中消失了。服务器端没有触发任何事件。这被两种不同的机制所取代——URL和发布表单数据。正确使用这些选项将取代您对ViewState的需求

在传统的ASP.NET web应用程序中,您会在网页上放置一个执行函数X的链接按钮。ASP.NET会将大量ViewState cruft、javascript和其他内容粘贴到网页中,这样,当用户单击按钮并“发回”网站时(通过提交一个无人知道存在的表单),ASP.NET重建发生的情况并确定必须执行特定的按钮事件处理程序

在MVC中,构建链接以访问特定路由。路由描述了用户希望执行的操作--/Users/albert/Index(显示所有拖欠用户的列表)。MVC中的路由系统确定哪个控制器将处理此路由以及该控制器上将执行的方法。任何附加信息都可以通过URL查询字符串值传输到控制器方法(第5页的拖欠项为第5页)

除了URL,您还可以使用HTML表单发回更复杂的信息(例如表单的数据量)或不适合查询字符串的内容,例如文件


所以您可以通过查询字符串和表单POST值来“维护”状态。你会发现,事实上,最终没有那么多的状态需要维护。事实上,必须保持大量的状态是一个很好的迹象,表明你的设计是缺乏的,或者你正试图做一些不适合网站模型的事情

MVC中不存在自动生成的视图状态,但您可以使用隐藏字段编写自己的视图状态

在MVC中,你不会在页面顶部看到很多加密字符,而你并不需要大部分加密字符

如果一张表格被贴回自身等 (回邮)?这部电影怎么样 页面/用户控件是否保持其状态?为了保持某种状态而不诉诸会话状态,人们使用了哪些技巧

发布的ViewData(或绑定到页面的强类型对象)可以再次推出到视图中。请参阅中的“将验证和业务规则逻辑与模型类集成”,其中展示了如何发布表单、验证表单,以及在发生错误时将字段返回表单

在.NETMVC中,什么是概念 陈述一些不是的东西 需要吗


一些相关问题:


在大多数传统web语言中,有状态环境的概念实际上并不常见。ASP.NET Webforms是该规则的一个例外,它通过重新创建许多标准来创建该例外。Webforms背后的目标本质上是抽象HTML和web开发的概念,以便从开发的角度模糊桌面应用程序和web应用程序之间的界限。这通常意味着ASP.NET Webforms提供的解决方案虽然有效,但它是一个“万全之策”实现,它会产生一些非常详细的输出,足以满足大多数用户的需求。相反,ASP.NET MVC的核心优势在于,它将HTML输出控制权还给了开发人员,并允许他们创建结构强大的web应用程序,这些应用程序在实现和表示方面定义得更好、更清晰,尽管牺牲了一些便利性

可以说,Webforms模型最大的缺点之一是ViewState,因为它会使输出变得混乱,在某些场景中会显著增加页面大小,并且通常相当于使用手提钻挂起图片。不要试图在MVC应用程序(或任何类似的应用程序)中使用ViewState,应该开始使用模式来显式控制表单中的字段,并仅使用最相关的数据优化输入和输出操作。除了标记中的更改外,您还将学习构建设计更好的解决方案,这些解决方案可以在应用程序内部和外部公开


我喜欢做的第一个比较很简单:Webforms构建Web页面,而MVC构建Web应用程序。如果您的日常工作主要是构建网站的各个部分,或者添加小块功能,那么您通常会发现Webforms更容易、更省时;另一方面,如果您想构建一个可测试、可扩展和灵活的完整应用程序,MVC是您的主旨。

实际上是这样。您必须忘记持久性是如何通过viewstate构成的

您还必须在脑海中将回发页面转换为“呼叫控制器”。这样以后事情就更容易理解了。您调用的不是页面,而是返回视图的控制器。所以,要么你在每次通话中一次又一次地构建你的整个“页面”,要么你决定只处理真正受电话影响的内容
<h2>Groups</h2>
    <div id="GroupList">
    </div>
    <div id="GroupDetail" title="Detail Group">
</div>
<%= Ajax.ActionLink("Edit", "DetailLocalisationGroup", 
                     new { id = group.Id }, 
                     new AjaxOptions() { 
                         UpdateTargetId = "DetailLocalisationGroup", 
                         OnSuccess = "InitialisationDetailGroup" })%>
[AcceptVerbs("POST")]
public ActionResult DetailLocalisationGroup(int id)
{
    LocalisationGroup group = servicelocalisation.GetLocalisationGroup(id);
    return View("DetailGroup", group);
}
@Html.Serialize("Transfer", Model, SerializationMode.EncryptedAndSigned)
public ActionResult Transfer(string id,[Deserialize(SerializationMode.EncryptedAndSigned)]Transfer transfer)
 HttpContext.Session["userType"] = CurrentUser.GetUserType();