.net 回发不';不能将aspx页面用作默认文档

.net 回发不';不能将aspx页面用作默认文档,.net,asp.net,iis,.net,Asp.net,Iis,如果我浏览到,我的回发工作正常。但是,如果我浏览到(将Default.aspx定义为默认文档),回发将不起作用 有没有办法让这一切顺利进行?或者我应该删除默认文档并强制用户浏览到 更新: 代码(部分): 如果您有兴趣在default.aspx文件中添加一些额外的代码,那么您可以使用blog post中定义的类似方法;这是关于将用户重定向到相同的默认页面,但具有明确的页面名称 //代码,从提到的博客中复制 protected void Page_Load(object sender, EventA

如果我浏览到,我的回发工作正常。但是,如果我浏览到(将Default.aspx定义为默认文档),回发将不起作用

有没有办法让这一切顺利进行?或者我应该删除默认文档并强制用户浏览到

更新:

代码(部分):


如果您有兴趣在default.aspx文件中添加一些额外的代码,那么您可以使用blog post中定义的类似方法;这是关于将用户重定向到相同的默认页面,但具有明确的页面名称

//代码,从提到的博客中复制

protected void Page_Load(object sender, EventArgs e)
{        
    string defaultPage = "default.aspx";
    string rawUrl = Request.RawUrl; //get current url

    //if current url doesn't contains default page name then add
    //default page name, and append query string as it is, if any
    if (rawUrl.ToLower().IndexOf(defaultPage) < 0)
    {
        string newUrl;
        if (rawUrl.IndexOf("?") >= 0)
        {
            // URL contains query string
            string[] urlParts = rawUrl.Split("?".ToCharArray(), 2);

            newUrl = urlParts[0] + defaultPage + "?" + urlParts[1];
        }
        else
        {
            newUrl = (rawUrl.EndsWith("/")) ? rawUrl + defaultPage : rawUrl + "/" + defaultPage;
        }

        Response.Redirect(newUrl);
    }
}
受保护的无效页面加载(对象发送方,事件参数e)
{        
字符串defaultPage=“default.aspx”;
字符串rawUrl=Request.rawUrl;//获取当前url
//如果当前url不包含默认页面名称,则添加
//默认页面名称,并按原样追加查询字符串(如果有)
if(rawUrl.ToLower().IndexOf(defaultPage)<0)
{
字符串newUrl;
if(rawUrl.IndexOf(“?”>)=0)
{
//URL包含查询字符串
字符串[]urlParts=rawUrl.Split(“?”.ToCharArray(),2);
newUrl=urlParts[0]+defaultPage+“?”+urlParts[1];
}
其他的
{
newUrl=(rawUrl.EndsWith(“/”)?rawUrl+defaultPage:rawUrl+“/”+defaultPage;
}
重定向(newUrl);
}
}

您是否尝试过将图像按钮设置为使用命令事件而不是“单击”

我认为“可能”图像点击不会导致完整回发,或许可以尝试定义如下:

  void ImageButton_Command(object sender, CommandEventArgs e) 
  {
     if (e.CommandName == "YourCommandName")
        //do your action
  }
然后按如下方式定义按钮:

      <asp:ImageButton id="btn1" runat="server"
       ImageUrl="images/image.jpg"
       OnCommand="ImageButton_Command"
       CommandName="YourCommandName"/>


我似乎记得需要这样做以允许图像按钮“提交”表单,因此我认为这将导致您要进行的回发。

我曾经遇到过类似的问题。问题是,在IIS中,默认文档配置为default.aspx,但我的页面名称为default.aspx。这只是一个区分大小写的问题。

我想我会尝试重现这个,你说得绝对正确。它在没有
default.aspx的情况下中断,您提供了一个非常简单的示例。看看HTML,原因相当清楚。这是因为action属性为空

快速搜索揭示了这一点(请参阅IIS 7或IIS 7.5集成模式下的默认文档中可能不会引发事件处理程序)

ASP.NET 4现在呈现HTML表单元素的action属性值 当向无扩展URL发出请求时作为空字符串 具有映射到它的默认文档。例如,在早期版本中 对于ASP.NET,对的请求将导致请求 默认设置为Default.aspx。在该文档中,开始表单标签是 呈现如下例所示:

<form action="Default.aspx" />
<form action="" />
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\u Browsers\Default.Browsers中创建此文件进行注册

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

当我将web项目从VS 2005(.Net 2.5)升级到VS2010(.Net 4.0)时,VS2010将以下内容插入了我的web.config:

<system.webServer>
  <defaultDocument>
        <files>
          <add value="mydefaultpage.aspx" />
        </files>
    </defaultDocument>
</system.webServer>

当我导航到“http://myserver/mywebsite“,这是我以前在.NET2.5下能够做到的,我得到了

“HTTP错误500.19-内部服务器错误 “无法访问请求的页面,因为该页面的相关配置数据无效。”(它显示了“defaultDocument”节点。)

但是,我可以在web.config中非常简单地解决这个问题,只需在默认网页值的开头插入“/”,如下所示:

<system.webServer>
  <defaultDocument>
        <files>
          <add value="/mydefaultpage.aspx" />
        </files>
    </defaultDocument>
</system.webServer>

我不必做其他受访者建议的任何事情


这样做是否有任何意外后果或缺陷?

如果表单处理器操作不在根目录中,则应该能够使用绝对路径而不使用文件名

<form action='/form/processor/' method=post id='myform'>

在.NET2.0中测试


空白操作路径出现问题,但路径输入正确。

另一个选项是在呈现页面之前检查表单操作是否为空。这对我有效:

    public void Page_PreRender(object sender, EventArgs e)
    {
        if (string.IsNullOrEmpty(this.Page.Form.Action))
            this.Page.Form.Action = "Default.aspx";
    }

考虑使用通过web.config完成的URL映射。这样可以避免应用程序中的额外代码,并让IIS为您工作

<system.web>
    <urlMappings>
        <add url="~/login" mappedUrl="~/login/default.aspx" />
        <add url="~/login/" mappedUrl="~/login/default.aspx" />
        <add url="~/this-folder-does-not-exist" mappedUrl="~/login/default.aspx" />
        <add url="~/this-folder-does-not-exist/" mappedUrl="~/login/default.aspx" />
    </urlMappings>
</system.web>

请确保包含该URL的两个版本,包括斜杠结尾和不包含斜杠结尾


当您需要快速更改并且不想修改源代码时,也可以从虚拟文件夹创建重定向(如上面的“此文件夹不存在”示例所示).

你能为你的default.aspx文件提供代码吗?回发不起作用的事实是,该文件正在使用head请求而不是get或post请求重定向。这就是为什么它不起作用。完成。如果我查看Charles(http嗅探器),我可以看到一篇帖子正在发送到服务器。当你说回发“不起作用”时”“你到底是什么意思?您可能希望在codebehind中放置一些断点,并与调试器一起运行,以查看到底发生了什么情况。如果您在页面中遇到一些未按预期运行的问题,则可以在页面中包含codebehind。仅为了查看它是否有影响,请将CausesValidation=“false”点击你的按钮,看看它是否改变了什么。好极了,这似乎是一个解决方案,你可能想把代码也粘贴到你的答案中,让它比仅仅给出一个链接更完整。这是一个很好的解决方法,但你看到的不是正常的行为,它应该可以工作。你的环境一团糟,或者有其他因素在起作用。试过了,但没有改变任何事情,斯凡。我也试过了——肯定不起作用。你有被否决的危险!;)@IanGrainger:如果这是问题的原因,它会起作用,但当action标记为空时,当然不会起作用。什么时候
<system.webServer>
  <defaultDocument>
        <files>
          <add value="mydefaultpage.aspx" />
        </files>
    </defaultDocument>
</system.webServer>
<system.webServer>
  <defaultDocument>
        <files>
          <add value="/mydefaultpage.aspx" />
        </files>
    </defaultDocument>
</system.webServer>
<form action='/form/processor/' method=post id='myform'>
    public void Page_PreRender(object sender, EventArgs e)
    {
        if (string.IsNullOrEmpty(this.Page.Form.Action))
            this.Page.Form.Action = "Default.aspx";
    }
<system.web>
    <urlMappings>
        <add url="~/login" mappedUrl="~/login/default.aspx" />
        <add url="~/login/" mappedUrl="~/login/default.aspx" />
        <add url="~/this-folder-does-not-exist" mappedUrl="~/login/default.aspx" />
        <add url="~/this-folder-does-not-exist/" mappedUrl="~/login/default.aspx" />
    </urlMappings>
</system.web>