标签: viewstate

如何在ASP.NET中进行更多控制?

我正在尝试构建一个非常非常简单的"微网络应用程序",如果我完成它,我怀疑它会引起一些Stack Overflow的兴趣.我在深度站点的C#中托管它,这是vanilla ASP.NET 3.5(即不是MVC).

流程非常简单:

  • 如果用户使用未指定所有参数的URL(或者如果其中任何参数无效)输入应用程序,我只想显示用户输入控件.(只有两个.)
  • 如果用户与一个URL进入该应用确实具有所有必需的参数,我想显示的结果输入控件(使他们能够改变参数)

以下是我的自我要求(设计和实施的混合):

  • 我希望提交使用GET而不是POST,主要是因为用户可以轻松地为页面添加书签.
  • 希望URL在提交后最终看起来很傻,上面有一些无关紧要的东西.请只是主要的URL和真实的参数.
  • 理想情况下,我想完全避免使用JavaScript.在这个应用程序中没有充分的理由.
  • 我希望能够在渲染时间和设置值等访问控件.特别是,我希望能够将控件的默认值设置为传入的参数值,如果ASP.NET不能自动执行此操作对我来说(在其他限制范围内).
  • 我很高兴自己做所有的参数验证,我不需要太多的服务器端事件.在页面加载上设置所有内容而不是将事件附加到按钮等非常简单.

大多数情况都没问题,但我没有找到任何完全删除视图状态并保留其余有用功能的方法.使用此博客文章中的帖子,我设法避免获得视图状态的任何实际 - 但它仍然最终作为URL上的参数,看起来非常难看.

如果我使它成为一个简单的HTML表单而不是ASP.NET表单(即取出runat="server"),那么我没有得到任何魔术视图状态 - 但后来我无法以编程方式访问控件.

可以通过忽略大部分ASP.NET并使用LINQ to XML构建XML文档并实现完成所有这些工作IHttpHandler.虽然感觉有点低.

我意识到我的问题可以通过放宽我的约束(例如使用POST而不关心剩余参数)或使用ASP.NET MVC来解决,但我的要求真的不合理吗?

也许ASP.NET只是不缩小到这种应用程序?虽然有一个非常可能的替代方案:我只是愚蠢,并且有一个非常简单的方法,我只是没有找到.

任何想法,任何人?(提示评论强大如何堕落等等.那很好 - 我希望我从未声称自己是一名ASP.NET专家,因为事实恰恰相反......)

.net asp.net viewstate .net-3.5

123
推荐指数
2
解决办法
9515
查看次数

114
推荐指数
5
解决办法
18万
查看次数

导致这个"Base-64 char数组的长度无效"的原因

我没有什么可以继续下去的.我无法在本地重现,但当用户收到错误时,我会收到一封自动电子邮件异常通知:

Invalid length for a Base-64 char array.

  at System.Convert.FromBase64String(String s)
  at System.Web.UI.ObjectStateFormatter.Deserialize(String inputString)
  at System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Deserialize(String serializedState)
  at System.Web.UI.Util.DeserializeWithAssert(IStateFormatter formatter, String serializedState)
  at System.Web.UI.HiddenFieldPageStatePersister.Load()
Run Code Online (Sandbox Code Playgroud)

我倾向于认为分配给viewstate的数据存在问题. 例如:

List<int> SelectedActionIDList = GetSelectedActionIDList();
ViewState["_SelectedActionIDList"] = SelectedActionIDList;
Run Code Online (Sandbox Code Playgroud)

如果不能在本地重现错误,很难猜出错误的来源.

如果有人对此错误有任何经验,我真的很想知道你发现了什么.

.net asp.net viewstate exception

89
推荐指数
6
解决办法
16万
查看次数

Base-64 char数组的长度无效

正如标题所说,我得到:

Base-64 char数组的长度无效.

我已经在这里阅读了这个问题,似乎建议将ViewState存储在SQL中,如果它很大的话.我正在使用一个带有大量数据收集的向导,所以我的ViewState很可能很大.但是,在我转向"存储在数据库"解决方案之前,也许有人可以看看并告诉我是否有其他选择?

我使用以下方法构建了用于传递的电子邮件:

public void SendEmailAddressVerificationEmail(string userName, string to)
{
    string msg = "Please click on the link below or paste it into a browser to verify your email account.<BR><BR>" +
                    "<a href=\"" + _configuration.RootURL + "Accounts/VerifyEmail.aspx?a=" +
                    userName.Encrypt("verify") + "\">" +
                    _configuration.RootURL + "Accounts/VerifyEmail.aspx?a=" +
                    userName.Encrypt("verify") + "</a>";

    SendEmail(to, "", "", "Account created! Email verification required.", msg);
}
Run Code Online (Sandbox Code Playgroud)

Encrypt方法如下所示:

public static string Encrypt(string clearText, string Password)
{

    byte[] clearBytes = System.Text.Encoding.Unicode.GetBytes(clearText);

    PasswordDeriveBytes pdb = new PasswordDeriveBytes(Password, new …
Run Code Online (Sandbox Code Playgroud)

c# asp.net viewstate base64

80
推荐指数
4
解决办法
20万
查看次数

缓存与会话的优点

在Session和Cache中存储数据表有什么区别?有哪些优点和缺点?

因此,如果它是一个简单的搜索页面,它返回数据表中的结果并将其绑定到gridview.如果用户'a'搜索并且用户'b'搜索,是否最好将其存储在Session中,因为每个用户很可能会有不同的结果,或者我仍然可以将他们的每个搜索存储在缓存中,或者这是否有意义,因为有只有一个缓存.我想基本上我想说的是Cache会被覆盖.

c# asp.net viewstate session caching

67
推荐指数
6
解决办法
7万
查看次数

.NET应用程序中的不稳定无效Viewstate问题

我似乎偶尔会在ASP.NET应用程序的事件查看器中获得"无效的视图状态" .

他们中的大多数(95%)似乎是引用ScriptResource.axd(该应用程序使用ASP.NET AJAX库).我无法删除Ajax库,因为到处都使用Ajax.

如何减少这些错误?我每天得到约100-200个错误,我不知道如何修复它们!它们来自不同的浏览器,不同的IP和地理位置.

我很难重现这个问题,因为它几乎没有发生在我身上,它只发生在我身上3-4次.

错误:

Process information: 
    Process ID: 4004 
    Process name: w3wp.exe 
    Account name: NT AUTHORITY\NETWORK SERVICE 

Exception information: 
    Exception type: HttpException 
    Exception message: Invalid viewstate. 

Request information: 
    Request URL: http://domainnamehere/ScriptResource.axd?d=W1R6x9VzZ2C9SKnIkOmX9VRLhSjJ3nOF1GSQvPwKS3html 
    Request path: /ScriptResource.axd 
    User host address: 124.177.170.75 
    User:  
    Is authenticated: False 
    Authentication Type:  
    Thread account name: NT AUTHORITY\NETWORK SERVICE 

Thread information: 
    Thread ID: 1 
    Thread account name: NT AUTHORITY\NETWORK SERVICE 
    Is impersonating: False 
    Stack trace:    at System.Web.UI.Page.DecryptStringWithIV(String s, …
Run Code Online (Sandbox Code Playgroud)

.net c# asp.net viewstate

61
推荐指数
2
解决办法
3万
查看次数

如何解码viewstate

我需要查看asp.net页面的viewstate的内容.我查找了一个视图状态解码器,找到了Fridz Onion的ViewState Decoder,但它要求页面的url获取其viewstate.由于我的视图状态是在回发后形成的,并且是由于更新面板中的操作而导致的,因此我无法提供网址.我需要复制并粘贴viewstate字符串,看看里面是什么.是否存在可以帮助查看viewstate内容的工具或网站?

asp.net viewstate

56
推荐指数
6
解决办法
10万
查看次数

我应该忽略偶尔出现的无效视图状态错误吗?

每隔一段时间(每天一次)我们在ASP.NET 3.5应用程序的日志中看到以下类型的错误

  • 视图状态无效
  • 无效的回发或回调参数

这些东西是否只是偶尔发生在ASP.NET应用程序中?有人会建议我们花很多时间来诊断导致问题的原因吗?

asp.net viewstate error-handling

56
推荐指数
2
解决办法
3万
查看次数

asp.net c#MVC:如何在没有ViewState的情况下生活?

我只是想将WebForms转换为MVC:

在.net MVC中,哪些概念使ViewState成为不需要的东西?

如果表格在iteself上回发等(即回发)?page/usercontrol如何保持其状态?

人们在维持某种状态而不采用会话状态方面有什么技巧?

当然,完全无国籍的环境不存在?

c# viewstate asp.net-mvc

52
推荐指数
3
解决办法
4万
查看次数

ViewState与Session ...通过页面生命周期维护对象

有人可以解释一下ViewState和Session之间的区别吗?

更具体地说,我想知道在我的页面的整个生命周期中保持对象可用的最佳方法(通过回发连续设置成员).

我目前使用Sessions来做这件事,但我不确定这是不是最好的方法.

例如:

SearchObject searchObject;
protected void Page_Load(object sender, EventArgs e)
{
     if(!IsPostBack)
     {
         searchObject = new SearchObject();
         Session["searchObject"] = searchObject;
     }
     else
     {
         searchObject = (SearchObject)Session["searchObject"];
     }
}
Run Code Online (Sandbox Code Playgroud)

这允许我在我的页面上的任何其他地方使用我的searchObject,但它有点麻烦,因为我必须重置我的会话变量,如果我改变任何属性等.

我认为必须有一个更好的方法来实现这一点,以便.NET不会在每次加载页面时重新实例化对象,而且还将它放在Page类的全局范围内?

.net c# viewstate session global-scope

40
推荐指数
2
解决办法
6万
查看次数