Я думал, что попробую воспроизвести это, и вы абсолютно правы.Он ломается без default.aspx
с очень простым примером, который вы предоставили.Глядя на HTML, причина довольно ясна.Это потому, что атрибут действия пуст.
Быстрый поиск обнаружил это, ASP.NET 4 Разрывные изменения (см., Что обработчики событий могут не вызываться в документе по умолчанию в IIS 7 или IIS7.5 Интегрированный режим).
ASP.NET 4 теперь отображает значение атрибута действия элемента формы HTML в виде пустой строки, когда выполняется запрос к URL-адресу без расширения, которому сопоставлен документ по умолчанию.Например, в более ранних выпусках ASP.NET запрос к http://contoso.com приводил к запросу к Default.aspx.В этом документе тег открывающей формы будет отображаться, как в следующем примере:
<form action="Default.aspx" />
В ASP.NET 4 запрос к http://contoso.com также приводит к запросу к Default.aspx,Однако теперь ASP.NET отображает HTML-тег открытия формы, как в следующем примере:
<form action="" />
Это различие в способе отображения атрибута действия может привести к незначительным изменениям в обработке сообщения формы IIS иASP.NET.Если атрибутом действия является пустая строка, объект IIS DefaultDocumentModule создаст дочерний запрос к Default.aspx.В большинстве случаев этот дочерний запрос прозрачен для кода приложения, и страница Default.aspx работает нормально.
Однако потенциальное взаимодействие между управляемым кодом и интегрированным режимом IIS 7 или 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) Создание адаптера форм Forms
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>