如果我浏览到http://localhost/edumatic3/trunk/login/accesscode/Default.aspx,我的回发工作正常.然而,如果我浏览到http://localhost/edumatic3/trunk/login/accesscode/(Default.aspx被定义为默认文档),回发就不起作用.

有没有办法让这一切顺利进行?还是应该删除默认文档并强制用户浏览到http://localhost/edumatic3/trunk/login/accesscode/default.aspx

更新:

代码(部分):

<div id="continueDiv">
        <asp:ImageButton ID="continueImageButton" 
                runat="server" ValidationGroup="continue" 
                OnClick="ContinueImageButton_Click" 
                AlternateText="<%$ Resources:login, continue_alternatetext %>"/>
    </div>

代码隐藏(部分):

protected void Page_Load(object sender, EventArgs e)
{
    Log.Debug("Page_Load(...)");
    Log.Debug("Page_Load(...) :: PostBack = " + IsPostBack);

    if (!IsPostBack)
    {
        continueImageButton.ImageUrl = "~/App_Themes/" + base.Theme 
        + "/images/" + Resources.login.btn_continue;
    }
}

/// <summary>
/// Continue Image Button Click Handler
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void ContinueImageButton_Click(object sender, EventArgs e)
{
 ....

当我点击ImageButton时,页面加载被触发,iPostBack为false...通常情况下,这应该是真的.ContinueImageButton_单击(…)根本不会被触发.

在HTML(Part)中:

<input type="image" name="ctl00$ContentPlaceHolder1$continueImageButton" 
id="ctl00_ContentPlaceHolder1_continueImageButton" 
src="../../App_Themes/LoginTedu/images/en_continue.png" alt="Continue" 
onclick="javascript:WebForm_DoPostBackWithOptions(new 
WebForm_PostBackOptions(&quot;ctl00$ContentPlaceHolder1$continueImageButton&quot;, 
&quot;&quot;, true, &quot;continue&quot;, &quot;&quot;, false, false))" 
style="border-width:0px;">

Http请求:

POST /edumatic3/trunk/login/accesscode/ HTTP/1.1
Host: localhost
Referer: http://localhost/edumatic3/trunk/login/accesscode/
Content-Length: 1351
Cache-Control: max-age=0
Origin: http://localhost
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 
   (KHTML, like Gecko)                 Chrome/13.0.782.215 Safari/535.1
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: nl,en-US;q=0.8,en;q=0.6,fr;q=0.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
ASP.NET_SessionId=33yal3buv310y2etuj33qghg; CurrenUICulture=en-us

__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=%2FwEPDw...

推荐答案

我想我会try 复制这个,你是绝对正确的.通过你提供的一个非常简单的例子,它突破了default.aspx.看看HTML,原因相当清楚.这是因为action属性为空.

快速搜索一下就会发现这是ASP.NET 4 Breaking Changes(请参阅在IIS7或IIS7.5集成模式下的默认文档中可能不会引发事件处理程序).

ASP.NET4现在呈现HTML表单元素的action属性值

<form action="Default.aspx" />

在ASP.NET 4中,对http://contoso.com的请求也会导致

<form action="" />

动作属性呈现方式的这种差异可能会导致

但是,托管代码与IIS7或IIS之间的潜在交互 7.5集成模式可能会导致托管的.aspx页停止工作 在子请求期间正确执行.

我已经创建了这两个解决问题的修复程序,使用其中一个.

1)将此代码添加到Global.asax

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"));
    }
}

2) 创建表单控制适配器

public class FormControlAdapter : ControlAdapter
{
    protected override void Render(System.Web.UI.HtmlTextWriter writer)
    {
        base.Render(new RewriteFormHtmlTextWriter(writer));
    }

    public class RewriteFormHtmlTextWriter : HtmlTextWriter
    {
        public RewriteFormHtmlTextWriter(HtmlTextWriter writer)
            : base(writer)
        {
            this.InnerWriter = writer.InnerWriter;
        }

        public override void WriteAttribute(string name, string value,
                                            bool fEncode)
        {
            if (name.Equals("action") && string.IsNullOrEmpty(value))
            {
                value = "default.aspx";
            }
            base.WriteAttribute(name, value, fEncode);
        }
    }
}

通过在App_Browsers\Default.Browsers中创建此文件进行注册

<browsers>
    <browser refID="Default">
       <controlAdapters>
          <adapter controlType="System.Web.UI.HtmlControls.HtmlForm"
                            adapterType="TheCodeKing.Web.FormControlAdapter" />
       </controlAdapters>
    </browser>
</browsers>

Asp.net相关问答推荐

页面刷新后如何存储JS Select 数据

无法为媒体类型application/x-www-form-urlencoded生成样本

如何防止 IISExpress 和我的网站文件夹弄乱我的文档文件夹?

我可以在一个 Web 项目中有多个 web.config 文件吗?

在 aspx 页面中使用 if else 和 eval

IIS 中 ASP.net 应用程序的单独应用程序池

威胁已经被清除了

asp.net:与其中的用户控件相比,控件/页面的页面生命周期顺序是什么?

使用 Owin 身份验证的服务器端声明缓存

如何将配置转换应用于外部配置文件

我可以创建 .config 文件并将其包含到 web.config 中吗?

如何在 ASP.NET 应用程序中使用 jQuery 捕获提交事件?

在 ASP.NET Core 1.0 上处理大文件上传

如何使用自动生成的列隐藏 ASP.NET GridView 中的列?

VirtualPath 在当前应用程序根目录之外

DBContext.Entry 有什么作用?

SQLServer 与 StateServer 的 ASP.NET 会话状态性能

当用户在文本框中按 Enter 键时执行按钮单击事件

Ashx 文件中的 HttpContext.Current.Session 为空

获取 Application_Start 中的当前应用程序物理路径