Значение текстового поля, установленное с помощью javascript, невозможно получить с помощью c # - PullRequest
0 голосов
/ 26 февраля 2010

У меня есть сетка с тремя текстовыми полями txtOpeningAdv, TxtAdvanceDeducted, TxtClosingAdvance ..... Использование функции KeyUp для TxtAdvanceDeducted Я рассчитал TxtClosingAdvance ... Моя страница Показывает значение в TxtClosingAdvance текстовое поле ... Но когда я получил к нему доступ с помощью c#, это дает мне ошибку Input String was not in a correct format ...

Когда я проверял через firebug,

<input type="text" class="text_box_height_14_width_50" id="ctl00_ContentPlaceHolder1_gridEmployee_ctl02_txtOpeningAdv" readonly="readonly" value="500.00" name="ctl00$ContentPlaceHolder1$gridEmployee$ctl02$txtOpeningAdv">

<input type="text" onkeyup="totalAmount(event,this);" autocomplete="off" class="text_box_height_14_width_50" id="ctl00_ContentPlaceHolder1_gridEmployee_ctl02_TxtAdvanceDeducted" name="ctl00$ContentPlaceHolder1$gridEmployee$ctl02$TxtAdvanceDeducted">

<input type="text" class="text_box_height_14_width_50" id="ctl00_ContentPlaceHolder1_gridEmployee_ctl02_TxtClosingAdvance" readonly="readonly" name="ctl00$ContentPlaceHolder1$gridEmployee$ctl02$TxtClosingAdvance">

Это моя сетка, альтернативный текст http://img90.imageshack.us/img90/7237/gridemp.jpg

Мой код C #,

foreach (GridViewRow row in gridEmployee.Rows) 
        {
            if (row.RowType == DataControlRowType.DataRow)
            {
                DataRow dr = dt.NewRow();
                dr["EmpId"] = Convert.ToInt64(((HiddenField)row.Cells[0].FindControl("HiddenId")).Value);
                dr["FromDate"] = Convert.ToDateTime(GetMonthNumberFromAbbreviation(fromdate[1].ToString()) + '/' + fromdate[0].ToString() + '/' + fromdate[2].ToString());
                dr["ToDate"] = Convert.ToDateTime(GetMonthNumberFromAbbreviation(todate[1].ToString()) + '/' + todate[0].ToString() + '/' + todate[2].ToString());
                dr["DaysPresent"] = Convert.ToDecimal(((TextBox)row.Cells[3].FindControl("TxtDaysPresent")).Text);//(row.Cells[4].Text);
                dr["OpeningAdvance"] = Convert.ToDouble(((TextBox)row.Cells[4].FindControl("txtOpeningAdv")).Text);
                dr["AdvanceDeducted"] = Convert.ToDouble(((TextBox)row.Cells[5].FindControl("TxtAdvanceDeducted")).Text);
                dr["RemainingAdvance"] = Convert.ToDouble(((TextBox)row.Cells[6].FindControl("TxtClosingAdvance")).Text);
                dr["SalaryGiven"] = Convert.ToDouble(((TextBox)row.Cells[7].FindControl("TxtSalary")).Text);
                dr["CreatedDate"] = System.DateTime.Now;
                dt.Rows.Add(dr);
            }
        }

Ошибка в строке, dr["RemainingAdvance"] = Convert.ToDouble(((TextBox)row.Cells[6].FindControl("TxtClosingAdvance")).Text);

Input string was not in a correct format

Но мой gridview имеет TxtClosingAdvance="400.00" ... Это текстовое поле только для чтения, где его значение будет помещено из TxtAdvanceDeducted события onkeyup javascript ...

1 Ответ

2 голосов
/ 26 февраля 2010

Как правило, ваше строковое значение пустое или содержит нежелательные символы, попробуйте проверить значение ((TextBox)row.Cells[6].FindControl("TxtClosingAdvance")).Text, если оно содержит 400.00, чем ошибка вызвана тем, что в региональных настройках сервера "."не является десятичным символом.Если он пуст, это означает, что ASP.NET не распознает ваши изменения JavaScript.ASP.NET восстанавливает не редактируемые значения элемента управления из VIEWSTATE в ответ по соображениям безопасности, попробуйте отключить VIEWSTATE для этого элемента управления, установив EnableViewState = false.

EDIT

* 1008как обсуждается проблема ReadOnly TextBox здесь

Надеюсь, это поможет

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