У меня есть точка останова на моей линии e.CommandName
, но эта линия никогда не попадает. Я также попытался добавить блок catch, который будет писать в browswer, но я просто получаю сообщение об ошибке «Невозможно отобразить страницу», типичная ошибка Chrome, возникшая, когда что-то пойдет не так, ничего не связано с моим проектом. Ниже мой код, что мешает моей линии e.CommandName
от попадания?Командная кнопка Never Being Hit
C# Page
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack) { LoadGrid(); }
}
protected void LoadGrid()
{
this.datagrid12.Visible = false;
this.datagrid12.Visible = true;
_dataSet = SQLQueryToPullInData
this.datagrid12.DataSource = _dataSet;
this.datagrid12.DataBind();
}
global.asax
void Application_Error(object sender, EventArgs e)
{
Exception CurrentException = Server.GetLastError();
Server.ClearError();
if (CurrentException != null)
{
try
{
using (StreamWriter sw = new StreamWriter(Server.MapPath("ErrorLog.txt")))
{
sw.WriteLine(CurrentException.ToString());
sw.Close();
}
}
catch (Exception ex) { }
}
}
HTML
<asp:DataGrid runat="server" ID="datagrid12" AutoGenerateColumns="false" ShowFooter="true" OnItemCommand="datagrid12_ItemCommand" >
<Columns>
<asp:TemplateColumn HeaderText="ID" ItemStyle-HorizontalAlign="Center" HeaderStyle-HorizontalAlign="Center" ItemStyle-Width="40" Visible="true">
<ItemTemplate>
<asp:LinkButton ForeColor="White" ID="btnEdit" runat="server" CausesValidation="True" CommandName="Edit" Text='<%# Eval("uID") %>' CommandArgument='<%# Eval("uID") %>'>
</asp:LinkButton>
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="uID" HeaderText="uID" Visible="false"></asp:BoundColumn>
<asp:BoundColumn DataField="name" HeaderText="Name"></asp:BoundColumn>
Ошибка записывается в файл с global.asax
System.Web.HttpUnhandledException (0x80004005): Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.Web.HttpException (0x80004005): Maximum request length exceeded.
at System.Web.HttpRequest.GetEntireRawContent()
at System.Web.HttpRequest.FillInFormCollection()
at System.Web.HttpRequest.EnsureForm()
at System.Web.HttpRequest.get_Form()
at System.Web.HttpRequest.get_HasForm()
at System.Web.UI.Page.GetCollectionBasedOnMethod(Boolean dontReturnNull)
at System.Web.UI.Page.DeterminePostBackMode()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.HandleError(Exception e)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest()
at System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context)
at System.Web.UI.Page.ProcessRequest(HttpContext context)
at ASP.pages_usersreport_aspx.ProcessRequest(HttpContext context) in c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\cfdef70b\4f768444\App_Web_0tprbakj.1.cs:line 0
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Другой код Я попытался
protected void datagrid12_ItemCommand(object source, DataGridCommandEventArgs e)
{
try
{
if (e.CommandName == "Edit")
{
LinkButton btn = ((LinkButton)e.Item.FindControl("btnEdit"));
string uid = btn.CommandArgument;
}
}
catch (Exception exception) { throw exception; }
}
EDIT
Я обновил свой HTML, чтобы добавить этот
OnClick="LinkButton_Click"
И добавил событие команды, чтобы показать это:
protected void LinkButton_Click(Object sender, EventArgs e)
{
string commandArgument = (sender as LinkButton).CommandArgument;
string commandName = (sender as LinkButton).CommandName;
if (commandName == "Edit")
{
Response.Redirect("../page2.aspx", false);
}
}
Но контрольная точка на string commandName
не попал в этом случае тоже.
Если я смотрю на вывод консоли, когда моя страница не загружается, это то, что я вижу, ничего описательного для меня, но может означать что-то другое.
http://localhost:1234/page2.aspx POST Net :: ERR_Connection_Reset
EDIT О TimeOut
я мой запрос не установлен тайм-аут (или я так думаю) и у меня есть MaxHttpCollectionKeys
также установлен на очень высокий число как не тайм-аут. Запрос выполняется нормально и отображает результаты как следует. Проблема заключается в том, что я нажимаю кнопку ссылки из отображаемой сетки.
SqlCommand.CommandTimeout = 0;
<add key="aspnet:MaxHttpCollectionKeys" value="20000"/>
К FIX
Чтобы исправить это, я должен был добавить следующие 2 строки в моей сети.Конфигурационный файл
<system.web>
<httpRuntime maxRequestLength="1048576" executionTimeout="3600" />
</system.web>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1073741824" />
</requestFiltering>
</security>
</system.webServer>
Вместо того, чтобы устанавливать OnItemCommand на сетку, вы пробовали обработчики событий OnCommand или OnClick на самом LinkButton? – jcc
Что происходит в странице init/load? Я был бы обеспокоен получением ошибки по умолчанию из chrome вместо страницы ошибок ASP.NET для стартеров. Что-то может не совпадать с общим жизненным циклом страницы. Можете ли вы остановиться на PreRender? –
@jcc - У меня нет. Это единственный способ, которым я когда-либо кодировал его, я буду искать Google для примера. –