.net 回发不';不能将aspx页面用作默认文档
如果我浏览到,我的回发工作正常。但是,如果我浏览到(将Default.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文件中添加一些额外的代码,那么您可以使用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>