我在为控件(vb.net)在回发时保留视图状态时遇到了一些问题
这是我控制的一些代码:
Protected Overrides Sub OnInit(ByVal e As System.EventArgs)
MyBase.OnInit(e)
Me.EnableViewState = True
Me.ViewStateMode = System.Web.UI.ViewStateMode.Enabled
If Not Page.IsPostBack Then
_SortTime = DateTime.Now
_SortTime.AddSeconds(-10) ' incase the fileserver and webserver date are out of sync
ViewState("PageLoadTimeStamp") = _SortTime
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
负载:
Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
MyBase.OnLoad(e)
_SortTime = CType(ViewState("PageLoadTimeStamp"), DateTime)
End Sub
Run Code Online (Sandbox Code Playgroud)
但是在每次回发时,视图状态再次为空。
更新:我想做什么?我想存储用户第一次加载页面的时间。然后,用户将进行多次回发。在每次回发时,我都需要知道那个时间。
更新 2:上下文:
我在任何地方都设置了 EnableViewState …
我可以禁用每个控件的viewstate,但不能禁用整个页面.
有没有办法在整个页面中禁用viewstate?
我正在开发一个自定义控件,需要在init上加载它的viewstate.我可以随时取消查看状态加载吗?
为什么当一个控件确实包含值但它设置为 .Enable=False 时,所有控件都会变为禁用(没关系),但为什么 ViewState 不会在下一次回发时保留数据?如果我获取 UserControl 而不修改其启用状态,则 ViewState 在回发之间工作。
我们如何禁用 UserControl 使其所有控件都变为禁用(这部分有效),但所有控件都保留使用 ViewState(这不起作用)?
1)在aspx.cs中单击按钮编辑:
myControl.Enabled = false;
//This produce to have all controls in myControl to be disabled.
Run Code Online (Sandbox Code Playgroud)
2)在asp.cs中:点击Save离开EDIT状态:
myControl.Enabled = true;
//This produce that all controls inside myControl are blank : no viewstate!
Run Code Online (Sandbox Code Playgroud)
其他回发之所以有效,是因为我们没有将 myControl.Enable 设置为 false。
对于所有ASP.NET专家和初学者,您是否认为状态管理是一项艰巨而烦人的任务?如果你重新开始使用ASP.NET,你会考虑使用ASP.NET MVC而不必再次处理ViewState吗?
另外,一旦你进入ASP.NET MVC,你永远不会回到ASP.NET Webforms(当然除非你的工作要求),这是真的吗?
我正在构建一个简单的http POST请求.在这篇文章中我需要添加一些项目,其中一项是在前一个请求中被拉下来的大型视图状态字符串.我注意到的是,原始请求需要转义所有特殊字符(如下所示)
_ EVENTTARGET =& _ EVENTARGUMENT =& __ VIEWSTATE = %% 3D&
但我不确定我是否在目标c中做到了这一点.目前,当我NSLog出视口状态字符串时,它仍然显示/和=字符.
任何人都可以证实我在正确的道路上吗?如果不是,我将如何转换viewstate中的特殊字符(即 - 而不是=我应该得到%3D)?
- (void)doHttpPostWithViewState:(NSString *)viewstate
{
responseData = [[NSMutableData data] retain];
NSURL *url = [NSURL URLWithString:@"https://localhost/Login"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
NSString* theBodyString = [[NSString alloc] initWithFormat:@"__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=%@",viewstate];
NSData *requestData = [theBodyString dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary * headers = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies];
[request setHTTPMethod:@"POST"];
[request setValue:@"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody: requestData];
[request setAllHTTPHeaderFields:headers];
[[NSURLConnection alloc] initWithRequest:request delegate:self];
}
Run Code Online (Sandbox Code Playgroud)
最后,为了本地调试目的 …
property curRefID:
public string curRefID
{
get
{
return ViewState ["curid"] as string;
}
set
{
ViewState ["curid"] = value;
}
}
Run Code Online (Sandbox Code Playgroud)
我在方法InitUCControl()中初始化它
protected override void OnInit ( EventArgs e )
{
base.OnInit ( e );
if ( !IsPostBack )
{
InitUCControl ( );
}
}
Run Code Online (Sandbox Code Playgroud)
然后我想在按钮单击事件中使用该属性,它始终返回null.但是当我在InitUCControl()中调试它时它有一个值.我不知道为什么它不能工作......太奇怪了.ps:我没有禁用viewstate.在页面的html源代码viewstate可以找到.
如果我希望对象在回发中保持不变,那么在ViewState中存储Object是个好主意吗?还有更好的想法吗?我担心ViewState的大小太大了......
我有一个下拉列表,我从SQL服务器填充数据.
我在Page_Init()事件中动态填充下拉列表.根据值,选择ListItem.
现在的问题是,当我在下拉列表中选择另一个项目时,在回发后,选择将重置为下拉列表中的第一个项目.
这是我的代码的基本版本,它不起作用:
ArrayList AD_Group_Members = ActiveDirectory.GetMemberOfGroup("AD-Group");
ArrayList ListMachines = SQLQuery.Read("Database", "SELECT idVM, RandomString, Computername, Owner, FROM VM ORDER BY Computername");
for (int i = 0; i < ListMachines.Count; i++)
{
String RandomString = ((Hashtable)ListMachines[i])["RandomString"].ToString();
String Owner = ((Hashtable)ListMachines[i])["Owner"].ToString();
DropDownList DropDownList_Owner = new DropDownList();
DropDownList_Owner.ID = "DropDownList_Owner_" + RandomString;
DropDownList_Owner.Width = Unit.Percentage(95);
DropDownList_Owner.AutoPostBack = true;
DropDownList_Owner.EnableViewState = true;
DropDownList_Owner.SelectedIndexChanged += DropDownList_Owner_SelectedIndexChanged;
Div_Test.Controls.Add(DropDownList_Owner);
for (int y = 0; y < AD_Group_Members.Count; y++)
{
ListItem ListItem = new ListItem(); …Run Code Online (Sandbox Code Playgroud) 我正在asp.net页面上实现一些功能,这样:并排列表框,左边一个是预先填充的,另一个是空的.除了左侧列表框还有添加按钮,除此之外还有删除按钮.我编写了javascript代码,这样在Add按钮上单击所选listItems从左列表框移动到右列表框,反之亦然.
它如下:

当我提交表单时,在代码隐藏中,我无法从右侧ListBox中检索新移动的值(我知道它不可能以这种方式). 如何访问代码隐藏中使用javascript更改到列表框所做的更改.
任何帮助赞赏.
使用Javascript/Jquery(1.7)/ Ajax,是否可以在同一个域中的2个不同页面上保留大约1kb的数据?
例如,用户将信息输入到文本框中,并从该页面导航到特定的不同页面.
那么alert用户可以使用上一页的文本框信息吗?