我从经典ASP ASP.NET 有遇到什么你们许多人已经知道,为"视图状态".我可能会被跳跃的枪我的假设,但是它看起来非常繁琐的。我已经开发了许多ASP形式在过去从未有过的问题保持状态。是否有另一种方式还是我要去学这个视图状态的事情ASP.NET?我使用Visual Studio2008VB.NET 作为代码后面的语言和框架v3。5SQL服务器2005年。

有帮助吗?

解决方案

你不必。查看 MVC框架。它消除了ViewState并且作为旧的ASP工作(至少从这个角度来看)。

其他提示

这一系列帖子必读了解ViewState

我禁用它并在Page_Init而不是Load中完成我的大部分工作(由于ControlState,值仍然保持不变)。这个设置对我来说很好。

ViewState是可选的,但很有帮助。 ViewState是什么,是SERVER SIDE上的控件上发生的所有更改。因此,如果您要将文本分配给标签,并且希望该文本保持不变而无需在每次回发时重新分配,那么您将需要保留该文本。另一个我总是打开ViewState的例子是数据绑定。

也就是说,有时候出于同样的原因关闭ViewState是有帮助的。例如,我始终关闭ViewState的一个地方是MESSAGE标签。这样,当我必须向用户打印一条消息(一个应该只显示一次然后消失的消息)时,我只需将文本添加到标签中然后忘记它。在下一个PostBack期间,标签将自动恢复为该控件的ASPX声明中的文本(在本例中为空字符串)。

现在,请注意,这与表单集合无关,表单集合是在PostBack期间发布到IIS的值。表单集合将用户输入的值发送到表单元素(文本框,复选框,下拉列表等)。这些.NET将填充到适当的位置 - 这会发生 AFTER ViewState已被处理。

这样,如果您发送带有短语“hi there”的文本框,对于客户,用户将其更改为“See ya”。然后提交表单,在Page_Load事件触发时文本框将具有的内容是具有“See ya”的文本框。在TEXT属性中。

在传统的ASP中,我们总是只使用HIDDEN字段来完成这项工作。 Viewstate只是一种自动执行此操作的方式。相信我的学习曲线并不像你想象的那么高。

当您关闭ViewState时,某些控件会严重削弱,因此请准备好解决这些问题。最简单的是懒惰并保持开启状态,但如果不加以控制,ViewState可以轻松占据HTML大小的30%。

例如,假设您有一个DropDown,并将其绑定到Fruits列表。您可以在页面加载中的if(!IsPostBack){}块中绑定它。如果关闭ViewState,单击按钮时将丢失项目。他们需要绑定每个页面加载。您还将丢失所选索引,因此您需要将其从Request.Form []变量中删除。

使用ASP.NET时,Viewstate是程序包的一部分。对于基本页面/网站,您不必“了解”如何使用Viewstate。只是在页面上放置控件时才会使用它。

使用ASP.NET很难避免使用Viewstate,因为即使你在项目级别关闭它,一些单独的控件仍然使用Viewstate来保存他们的信息。

如果您不想处理Viewstate,请考虑使用ASP.NET MVC框架。您可能会更熟悉来自Classic ASP的MVC框架。

ViewState在几乎所有情况下都是完全可选的。即使ViewStateEnabled = false,ASP.NET也会自动重新填充字段。我已经使用ASP.NET 5或6年了,从来没有必要依赖ViewState。我甚至可以禁用它。

ViewState大部分都是自动运行的。这就是ASP.NET如何跟踪其所有控件的当前状态。

如果要存储一些额外数据,也可以手动使用viewstate。这很简单:

Viewstate["Key"] = value;

唯一需要注意的是,您在viewstate中存储的任何对象都必须是可序列化的。

我肯定可以建议避免视图状态在数据网格和DropDownLists因为我刚刚开始这样做我自己。我没有做到这一点乐趣,我不得不解决一个网页,长得这么大,这是造成其他问题。但事实证明,这是一件容易的事,结果是这么富有戏剧性,我感到非常高兴。当然对于一个小型的简单的应用程序或对于少量数据,这将是不必要的,但在另一方面它是好是一致的(总是从已知已知的,所以你可以不断改进过程...),以及为什么携带额外的行李,不断?

这将需要一个小小的手动干预的一部分。例如,如果关闭视图状态为下拉菜单,你会需要他们重新绑定在每个回发,然后再恢复SelectedValue从该请求的对象。你需要读了关于这一点,但是谷歌有很多容易获得的信息。

为asp.net控件自动保存Viewstate" rooted"到页面。您无需做什么,值和其他一些信息将以隐藏的输入B64编码传递。如果你愿意,你可以看一下它,但没关系,它都是自动处理的。

如果你写的代码你自己的消费,可以只是把它关闭而不用担心。

大概是你要保持网络的形式编写的代码中由其他人,所以你应该知道什么config options和痛点。顶部的几个我能想到的

  • 如何禁止它的网站,网页和控制水平
  • 为什么MachineKey是有关在网的农场
  • 为什么你的事件记录是完整的ViewStateAuthentication错误。
  • 什么源viewstateuserkey是

在实际的学习曲线,这可能是一个彻底阅读的几MSDN的文章。

ViewState是Web表单隐喻所固有的必然恶魔。我个人认为这种方法过时,臃肿,一般不适合网络。如上所述,更好地检查MVC框架。

我建议你避免使用ViewState作为“缓存”的诱惑。来回传递数据(我已经看到网站这样做是因为集群设置而没有SQL支持的会话状态)。数据被序列化并添加到页面中,并且必须在每个请求中进行往返,增加页面的总大小并使站点加载速度变慢。

'<%@ Control Language="C#" AutoEventWireup="true" CodeFile="HomePage.ascx.cs" Inherits="HomePage" %>
<script runat="server">
  void testHF_ValueChanged(object sender, EventArgs e)
    {
       this.HFvalue.Text = this.testHF.Value ;

    }
</script>
<asp:Label ID="UserNamelbl" runat="server" Text="User Name : " Visible="false"></asp:Label>
<asp:TextBox ID="UserNametxt" runat="server" Visible="false" ></asp:TextBox>
 <asp:Label ID="HFvalue" Text="......" runat="server"></asp:Label>
 <asp:HiddenField ID="testHF"
OnValueChanged="testHF_ValueChanged"
value="" 
runat="server" ></asp:HiddenField>
<input type="submit" name="SubmitButton" value="Submit" onclick="CL()" />

<script type="text/javascript">
    function CL() 
    {
        this.testHF.Value = this.UserNametxt.Text;  
    }
</script>
'
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top