2016-01-25 2 views
0

У меня есть точка останова на моей линии 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> 
+0

Вместо того, чтобы устанавливать OnItemCommand на сетку, вы пробовали обработчики событий OnCommand или OnClick на самом LinkButton? – jcc

+0

Что происходит в странице init/load? Я был бы обеспокоен получением ошибки по умолчанию из chrome вместо страницы ошибок ASP.NET для стартеров. Что-то может не совпадать с общим жизненным циклом страницы. Можете ли вы остановиться на PreRender? –

+0

@jcc - У меня нет. Это единственный способ, которым я когда-либо кодировал его, я буду искать Google для примера. –

ответ

1

Обычно я встречаю этот тип ошибки, если мой aspx искажен (забыл закрыть тег и т. д.). Убедитесь, что у вас есть соответствующие теги закрытия для вашей сетки.

Также вы можете показать коды событий Page_Load, а также как заполнить свою сетку?

Наконец, в ваших Global.asax.cs, добавьте следующие строки кода:

void Application_Error(object sender, EventArgs e) 
{ 
    try 
    { 
     Exception exception = Server.GetLastError(); 
     Server.ClearError(); 
     if(exception != null) 
     { 
      // Do Some Stuff! 
     } 
    } 
    catch(Exception ex) 
    { 
    } 
} 

И поставил точку останова в Server.ClearError(); линия. Это должно позволить вам лучше понять, какая ошибка возникает.

+0

См. Последнее редактирование. сетка правильно сформирована, и я включил синтаксис, необходимый для устранения неполадок. –

+0

Ваша ошибка опубликована на выходе global.asax. Превышена максимальная длина запроса. Что-то делать с вашим вызовом БД. – Batuta

+0

Вызов db выполняется нормально, а сетка загружается. Но это похоже на то, что после загрузки сетки страница не будет нажимать на какие-либо дополнительные кнопки фильтрации/ссылки. –