按钮点击工作随机asp.net
本文关键字:asp net 随机 工作 按钮 | 更新日期: 2023-09-27 18:11:10
我有一个RadMultipage控件在我的asp.net网页。
我正在将用户控件作为页面加载到该控件中。
下面是加载用户控件的代码。 protected void RadMultiPage1_PageViewCreated(object sender, Telerik.Web.UI.RadMultiPageEventArgs e)
{
try
{
string controlName;
int index = e.PageView.ID.Trim().IndexOf(" ");
if (index > 0)
{ controlName = e.PageView.ID.Trim().Remove(index); }
else
{ controlName = e.PageView.ID; }
Control pageViewContents = LoadControl(controlName + ".ascx");
pageViewContents.ID = e.PageView.ID + "userControl";
e.PageView.Controls.Add(pageViewContents);
}
catch (Exception ex)
{
Utility.WalkException(this, ex, "There was an error while performing this operation.");
}
}
我还启用了viewstate和autoeventwireup。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" EnableViewState="true" ViewStateMode="Enabled" Inherits="VentureAssessmentApp.Default" %>
现在我遇到的问题是用户控件上的按钮。该按钮的click事件没有被触发。它只是重新加载页面。甚至IsPostBack也返回false。
谁能提出解决办法?有时,点击事件会起作用,但大多数时候不起作用。
这是一个典型的页面生命周期问题。我猜发生的事情是,当回发被触发时,页面没有关于哪个控件触发回发的线索,因为当它进行评估时,按钮(和它的父UserControl)还没有添加到页面的控件层次结构…所以,我把我的手指指向RadMultiPage1_PageViewCreated
事件处理程序。在我看来,动态地向页面添加服务器控件是一个尴尬的地方。
将控件加载逻辑移出RadMultiPage1_PageViewCreated
事件。将此逻辑放置在页面的Init
事件中,如果Init
事件太早,则放置在页面的Load
事件中。
您可以通过检查SelectedIndex
属性或SelectedPageView
属性来确定在RadMultiPage
控件中选择了哪个页面。但是,如果您将RadTabStrip
控件与RadMultiPage
控件结合使用,则可以检查RadTabStrip
的SelectedTab
或SelectedIndex
属性
protected override void OnLoad(EventArgs e)
{
LoadStuff();
}
private void LoadStuff()
{
try
{
string controlName;
int index = YOUR_MULTI_PAGE_CONTROL.SelectedIndex;
if (index > 0)
{ controlName = YOUR_MULTI_PAGE_CONTROL.PageViews[index].ID.Trim().Remove(index); }
else
{ controlName = YOUR_MULTI_PAGE_CONTROL.PageViews[index].ID; }
Control pageViewContents = LoadControl(controlName + ".ascx");
pageViewContents.ID = YOUR_MULTI_PAGE_CONTROL.PageViews[index].ID + "userControl";
YOUR_MULTI_PAGE_CONTROL.PageView.Controls.Add(pageViewContents);
}
catch (Exception ex)
{
Utility.WalkException(this, ex, "There was an error while performing this operation.");
}
}
终于找到问题了。请把这个答案看一遍。这正是我的解决方案所发生的。
ASP。NET 4现在将HTML表单元素的action属性值呈现为一个空字符串,当向一个无扩展的URL发出请求时,该URL有一个默认文档映射到它。例如,在ASP的早期版本中。. NET中,对http://contoso.com的请求将导致对Default.aspx的请求。在该文档中,开始表单标记将呈现如下示例所示:
在ASP。. NET 4中,对http://contoso.com的请求也会导致对Default.aspx的请求。然而,ASP。. NET现在呈现HTML打开表单标记,如下例所示:
action属性呈现方式的差异可能会导致IIS和ASP.NET处理表单发布的方式发生细微变化。当action属性是一个空字符串时,IIS的DefaultDocumentModule对象将创建一个Default.aspx的子请求。在大多数情况下,此子请求对应用程序代码是透明的。Aspx页面运行正常
但是,托管代码与IIS 7或IIS 7.5集成模式之间的潜在交互可能导致托管.aspx页面在子请求期间停止正常工作。
将其添加到global。
void Application_BeginRequest(object sender, EventArgs e)
{
var app = (HttpApplication)sender;
if (app.Context.Request.Url.LocalPath.EndsWith("/"))
{
app.Context.RewritePath(
string.Concat(app.Context.Request.Url.LocalPath, "default.aspx"));
}
}
希望对大家有帮助。
谢谢。