我有以下情况:
用户将在页面上定义某个过滤器,在回发时,我将使用该过滤器查询数据库,并向用户返回一堆匹配的记录,每个记录旁边都有一个复选框,因此他可以选择是否对每个那些记录.
在Classic ASP/PHP中,我可以生成许多名为"chk __*"的控件,然后在回发时查看所有$ POST条目,查找前缀为"chk "的条目.
在ASP.Net 2.0中执行此操作的最佳方法是什么?
我可以通过实现带有包含复选框的模板的Repeater,将Repeater绑定到数据集,然后在第二个Postback上轻松完成,我只是这样做:
For Each it As RepeaterItem In repContacts.Items
Dim chkTemp As CheckBox = DirectCast(it.FindControl("cbSelect"), CheckBox)
If chkTemp.Checked Then
End If
Next
Run Code Online (Sandbox Code Playgroud)
然而,这给我一个巨大的Viewstate 略有不利,这非常糟糕,因为客户端需要将整个视图状态重新上传到服务器,而这些人可能会在一个糟糕的连接上使用我的网站.
还有其他想法吗?(我也可以动态创建控件并像过去那样迭代Request.Form,但是,我正在寻找一个更干净的
我发现很多帖子,人们试图解决SelectedIndexChanged不工作的问题EnableViewState='false'.
我有点困惑,为什么控制状态不会启动并允许它工作,但如果有人也可以解释这个奖励积分.
一些'黑客'非常'hacky'.就像在页面本身的viewstate上设置一个对应于下拉值的值,然后将该值与回发期间接收的值进行比较.
我正在寻找最优雅的解决方案(如果有一个好的解决方案).
我不知道这是否是一个聪明的派生控件或更聪明的东西,但我想确保解决方案足够通用,以便"可信任",而不仅仅是一个仅适用于特定页面的黑客(这是常见的这样的黑客!).
ASP.NET页面ViewState似乎很难跟上动态删除的控件及其中的值.
我们以下面的代码为例:
ASPX:
<form id="form1" runat="server">
<div>
<asp:Panel runat="server" ID="controls" />
</div>
</form>
Run Code Online (Sandbox Code Playgroud)
CS:
protected void Page_Init(object sender, EventArgs e) {
Button b = new Button();
b.Text = "Add";
b.Click +=new EventHandler(buttonOnClick);
form1.Controls.Add(b);
Button postback = new Button();
postback.Text = "Postback";
form1.Controls.Add(postback);
}
protected void Page_Load(object sender, EventArgs e) {
if (ViewState["controls"] != null) {
for (int i = 0; i < int.Parse(ViewState["controls"].ToString()); i++) {
controls.Controls.Add(new TextBox());
Button remove = new Button();
remove.Text = "Remove";
remove.Click +=new EventHandler(removeOnClick); …Run Code Online (Sandbox Code Playgroud) 我创建了一个自定义服务器控件来处理一些数据,将数据存储到ViewState,然后从该数据中呈现自己.我正在使用调试器,可以物理地看到数据设置为ViewState:
public string RawData
{
get
{
string result = null;
if (ViewState["RawData"] != null)
{
result = ViewState["RawData"].ToString();
}
return result;
}
set
{
ViewState["RawData"] = value;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,在回发后,ViewState值不会保留,并且为null.为什么会这样?我在哪里可以尝试进行故障排除?我可以说,自使用这种方法以来,ViewState隐藏字段长度已经增加.
提前致谢!
编辑:这是我的Render方法,看看我在哪里设置ViewState:
protected override void Render(HtmlTextWriter writer)
{
if (this.RawData == null)
{
StringBuilder content = new StringBuilder();
content.Append(this.BuildHeader());
content.Append(this.BuildLevelsMarkup());
content.Append(this.BuildFooter());
this.RawData = content.ToString();
}
writer.Write(this.RawData);
}
Run Code Online (Sandbox Code Playgroud) 所以我需要序列化一个通用字典Dictionary<long, List<MyClass>>.我需要序列化它以将其存储在ASP.Net应用程序的ViewState中.
我找到了一个使用TypeConverter将我的类转换为要序列化的字符串的示例,但是我收到一条错误消息MyClass is not marked as serializable.
这是我班的代码..
[TypeConverter (typeof(MyClass_Converter))]
public class MyClass
{
// some properties
}
public class MyClass_Converter : System.ComponentModel.TypeConverter
{
public override bool CanConvertTo(...)
{
// code
}
// CanConvertFrom, ConvertFrom, ConvertTo methods
}
Run Code Online (Sandbox Code Playgroud)
然后,当我想序列化它时,我正在使用此代码...
LosFormatter los = new LosFormatter();
StringWriter sw = new StringWriter();
los.Serialize(sw, hiddenData);
String resultSt = sw.GetStringBuilder().ToString();
ViewState["HiddenData"] = resultSt;
Run Code Online (Sandbox Code Playgroud)
难道我做错了什么?
我正在尝试创建一个强类型的viewstate对象.
public class MyNewPage : ViewStatePage<MyNewPageViewStateStore>
Run Code Online (Sandbox Code Playgroud)
在ViewStatePage的实施,我实例化对象Store进行的this.ViewState["_PageViewState"].在派生页面中,我将使用该对象并对其进行更改.
什么是在asp.net页面中调用的最后一个事件仍然可以影响View State?
是Unload吗?
我在编写用于抓取网页的实用程序时遇到了一个问题。
我正在发送 POST 请求来检索数据,我模仿了我正在抓取的网络行为(根据使用提琴手收集的信息)。
我已经能够自动替换我的 POST 上的所有参数,除了 VIEWSTATE。我的猜测是网络正在根据给定的 VIEWSTATE 执行一些逻辑,这就是为什么我没有得到预期的结果(我尝试在 VIEWSTATE 中输入 fiddler 给出的值,然后我确实得到了预期的结果,但是我想自动化这个过程)
有没有一种方法可以在不损坏它的情况下编辑 VIEWSTATE 字符串?
我尝试使用 base64 解码和编码(最后在 POST 操作之前使用 URLEncode),但无法保持有效。
我正在将用户控件动态加载到div中,我需要在回发时保留该控件,以便Save在用户完成编辑后调用方法。div和所有用户控件都具有EnableViewState = True。
ASPX Div声明
<div id="dynamicDiv" runat="server" enableviewstate="true">
</div>
Run Code Online (Sandbox Code Playgroud)
背后的代码
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If (Not IsPostBack) Then
'Implement some logic to load the User Controls using LoadControl
'Set all the userControl properties (including EnableViewState = True)
'Call a method in the user control to load it's content
Me.dynamicDiv.Controls.add(userControl)
End If
End Sub
Protected Sub Save(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSave.Click
For Each …Run Code Online (Sandbox Code Playgroud) 我们最近将我们的站点迁移到.NET 4.5,其中一个更改是将targetFramework ="4.5"添加到httpRuntime以选择加入ASP.NET 4.5行为.一切都按预期工作,直到我们尝试在本地重现一些异常.在升级之前,我们能够使用视图状态解码器(例如http://www.binaryfortress.com/ASPNET-ViewState-Helper/)来查看存储在视图状态中的值.但是,这似乎不再可能,viewstate似乎在每个页面请求上使用随机密钥加密(每次都更改).
那么,有没有人知道在ASP.NET 4.5中正确解密/解码viewstate的步骤?
我有一个Web应用程序,它使用Session变量来保存某些数据表的状态.我没有使用viewstate来增加页面的重量.
我不需要在页面更改时保持状态,所以我想在页面上释放这些会话变量.
用户更改网站页面时如何拦截?有一种像"Page Leave"这样的方法吗?