我有一个asp.net网页,其中包含大量代码,这些代码在页面的Page-Load事件中处理.我在页面上还有一个下拉框,应该用新值重新加载页面,但我希望在处理整个页面加载代码之前得到这个新值.我试图了解ASP.NET页面生命周期.
我应该将页面加载代码移动到以后的事件,还是有办法在页面加载事件开始之前获取下拉列表值的值?
TIA
会话状态,页面生命周期中的应用程序状态在哪里?
为什么DisplayUsers();
不起作用?
我的基页是:
public class adminPage : System.Web.UI.Page
{
protected override void OnLoad(EventArgs e)
{
if (User.Identity.IsAuthenticated == false) { Response.Redirect("~/Account/login.aspx?ReturnUrl=/admin"); };
if (!(User.IsInRole("admin") || User.IsInRole("super user"))) { Response.Redirect("/"); };
}
}
Run Code Online (Sandbox Code Playgroud)
我的班级是
public partial class users : adminPage
{
protected void Page_Load(object sender, EventArgs e)
{
string sName;
adminGeneralData.GetToolData(2, out sName);
pageH1.Text = sName;
DisplayUsers();
}
protected void DisplayUsers()
{
DataSet ds = userData.GetUsersData();
userList.DataSource = ds;
userList.DataBind();
}
}
Run Code Online (Sandbox Code Playgroud)
但DisplayUsers()
不起作用,
我有一个相当复杂的页面,可以在转发器内动态构建用户控件.在初始化之前,必须在Init页面事件期间绑定此转发器,ViewState
否则动态创建的用户控件将不会保留其状态.
这会创建一个有趣的Catch-22,因为我需要在初始页面加载时创建绑定转发器的对象,然后将其保留在内存中,直到用户选择离开或保存为止.
因为我不能ViewState
用来存储这个对象,但是在Init期间可以使用它,我被迫将它存储在Session中.
这也有问题,因为我必须在非回发期间显式地使会话值为空,以便模拟ViewState
工作方式.
在这种情况下,必须有一种更好的状态管理方法.有任何想法吗?
编辑:一些关于使用的好建议LoadViewState
,但是当我这样做时,我仍然遇到状态未恢复的问题.
这里有一点如果是页面结构
Page - > UserControl - > Repeater - >动态创建的N量UserControl.
我将重写LoadViewState
放在父级中UserControl
,因为它被设计为完全封装并独立于它所在的页面.我想知道问题出在哪里.
我试图了解Asp.net页面生命周期中的不同事件.我遇到了这个链接.它有两个阶段加载视图状态和加载回发数据.我曾经认为这两者意味着同样的事情.但是这篇文章说,回发数据不是视图状态数据.我不明白这一点.如果有人可以看看.
我正在研究一种问卷类型的应用程序,其中问题存储在数据库中.因此,我在每个Page.OnLoad上动态创建我的控件.这就像一个魅力,并且在回发之间保持ViewState,因为我确保我的动态控件始终具有相同的生成Control.ID.
除了动态填充问题的用户控件之外,我的问卷页面还包含一个"状态"部分(也由用户控件封装),表示问卷的状态(选项为"完成","已启动"或"在进展').如果用户更改问卷状态(即从"进行中"更改为"完成"),我需要回发到服务器,因为问卷的动态部分的内容取决于所选状态.
无论状态如何,一些问题始终存在,而其他问题可能根本不存在于所选状态.关键是,当状态发生变化时,我必须回发到页面并呈现正确的问题集.此外,我需要为那些"始终可用"的问题保留任何用户输入的值.
但是,由于ASP.NET中的页面生命周期,"状态"用户控件的OnLoad(包含从DB加载正确问题所需的正确状态)在"动态问题"用户控件之后才会执行已填充(错误/陈旧值).
为了解决这个问题,我将一个事件从我的"状态"用户控件引发到主页面,以指示状态已更改.然后主页面在"动态问题"用户控件上引发一个事件.因为当这个事件冒出来时,"动态问题"用户控件已经从DB加载了"错误"的问题,它首先调用Controls.Clear.然后,它愉快地使用新状态来查询数据库中的"正确"问题,并在每个问题上执行Control.Add().仅供参考,Control.ID在回发中保持一致.
这个解决方案有效......分类.确定了所选状态的正确问题集; 然而,ViewState因为"永远可用"的问题而迷失了方向.我猜这是因为"动态问题"用户控件在响应状态更改事件时调用Controls.Clear.这必须以某种方式杀死ViewState和我的动态控件之间的关联,即使Control.ID是一致的.
这似乎是一个常见的要求,我几乎可以肯定,有一个更好,更清洁,更不容易出错的方法来实现这一目标.如果它不明显,尽管在去年使用它,我还是无法理解ASP.NET页面的生命周期.任何帮助深表感谢!
HttpApplication方法的预期顺序是:
我正在通过一个情况,它绝对没有异常,在Init之后,它直接进入ApplicationEndRequest.它不会调用Application_BeginRequest也不会启动页面生命周期.
我该怎么办?
我正在运行ASP.NET 4.0项目.
.aspx页面已AutoEventWireup="true"
在标题中设置.
虽然OnPreInit
叫,Page_PreInit
不是吗?任何人都可以提出什么问题?
protected void Page_PreInit(object sender, EventArgs e)
{
Response.Write("bar");
}
protected override void OnPreInit(EventArgs e)
{
Response.Write("foo");
base.OnPreInit(e);
}
Run Code Online (Sandbox Code Playgroud) 我已经看到过像这样的其他解决方案非常简单,但如果javascript函数不仅仅是做confirm('sure?');
什么呢?我永远不知道什么时候会回归布尔.
所以我决定实现我的所有 ASP.NET按钮:
<button id="btnDelete" name="btnDelete" class="btn">Delete</button>
<asp:Button ID="_btnDelete" runat="server" OnClick="_btnDelete_Click" style="display:none;" />
$('#btnDelete').click(function (e) {
$.blockUI({ message: $('#divConfirmDeleteModal'), overlayCSS: { cursor: 'default' }, css: { cursor: 'default' }, baseZ: 5555 });
return false;
});
$('#btnDeleteYes').click(function () {
$('#<%=_btnDelete.ClientID%>').trigger('click');
});
$('#<%=_btnDelete.ClientID%>').click(function (e) {
// the delay happens here. if i put an alert here, it fires,
// but then the page just loads until eventually the method gets called
<%= ClientScript.GetPostBackEventReference(_btnDelete, string.Empty) %>;
});
Run Code Online (Sandbox Code Playgroud)
..它一直运作良好,直到现在.我在IE中遇到问题(甚至是版本10) …
page-lifecycle ×10
asp.net ×9
.net ×3
c# ×3
viewstate ×2
dynamic ×1
events ×1
javascript ×1
pageload ×1
webforms ×1