Получение System.FormatException после использования ClientScript - PullRequest
2 голосов
/ 02 февраля 2011

Я пытаюсь кодировать поведение onclick для GridView, используя следующий codebehind-code:

protected void gridProcesses_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        e.Row.Attributes["onmouseover"] = "this.style.cursor='hand';";
        e.Row.Attributes["onmouseout"] = "this.style.textDecoration='none';";
        e.Row.Attributes["onclick"] = ClientScript.GetPostBackClientHyperlink(this.gridProcesses, "SelectProcess$" + e.Row.Cells[0].Text);
    }
}

protected override void Render(HtmlTextWriter writer)
{
    foreach(GridViewRow row in gridProcesses.Rows)
    {
        if (row.RowType == DataControlRowType.DataRow)
            this.ClientScript.RegisterForEventValidation(this.gridProcesses.UniqueID, "SelectProcess$" + row.Cells[0].Text);
    }
    base.Render(writer);
}

protected void gridProcesses_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "SelectProcess")
    {
       //do stuff after click on gridviewrow
    }
}

После компиляции и щелчка по GridViewRow вызывается моя gridProcesses_RowCommand, и она входит«если», поскольку SelectProcess был передан как CommandName, все, что я пытаюсь сделать в этом коде, работает, но после этого программа просто перестает работать после выдачи следующей ошибки:

System.Web.HttpUnhandledException (0x80004005): Eine Ausnahme vom Typ "System.Web.HttpUnhandledException" wurde ausgelöst. ---> System.FormatException: Input string was not in a correct format.
   bei System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
   bei System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
   bei System.Convert.ToInt32(String value, IFormatProvider provider)
   bei System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup)
   bei System.Web.UI.WebControls.GridView.RaisePostBackEvent(String eventArgument)
   bei System.Web.UI.WebControls.GridView.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
   bei System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
   bei System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
   bei System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   bei System.Web.UI.Page.HandleError(Exception e)
   bei System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   bei System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   bei System.Web.UI.Page.ProcessRequest()
   bei System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context)
   bei System.Web.UI.Page.ProcessRequest(HttpContext context)
   bei ASP.processes_aspx.ProcessRequest(HttpContext context) in c:\Users\roett04\AppData\Local\Temp\Temporary ASP.NET Files\root\4c906b5d\4377a67f\App_Web_qcvmvpfq.0.cs:Zeile 0.
   bei System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   bei System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

Тот же кодработает отлично, если я добавляю SelectButton и использую OnSelectedIndexChanging вместо переопределения метода рендеринга и использования rowdatabound для добавления обработчика onclick.

1 Ответ

2 голосов
/ 02 февраля 2011

Элемент управления GridView поддерживает команду Page, которая может использовать свойство CommandArgument события в качестве номера страницы.Похоже, что происходит сбой при преобразовании этого свойства.

Возможно ли назначить что-то для e.CommandArgument вне вашего if блока?Если это так, вы не должны этого делать, потому что это повлияет на команды, отличные от SelectProcess.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...