【问题标题】:Textbox Value set using javascript can't be accessed using c#无法使用 c# 访问使用 javascript 设置的文本框值
【发布时间】:2010-02-26 05:45:57
【问题描述】:

我有一个带有三个文本框的网格视图 txtOpeningAdvTxtAdvanceDeductedTxtClosingAdvance..... 在 TxtAdvanceDeducted 上使用 KeyUp 函数我计算了 TxtClosingAdvance... 我的页面在 TxtClosingAdvance 中显示值文本框...但是当我使用c# 访问它时,它给了我错误Input String was not in a correct format...

当我通过萤火虫检查时,

<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">

这是我的网格视图, alt text 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 event javascript...

【问题讨论】:

    标签: c# javascript gridview textbox


    【解决方案1】:

    作为猜测,您的字符串值为空或包含不需要的符号,请尝试检查 ((TextBox)row.Cells[6].FindControl("TxtClosingAdvance")).Text 的值,如果它包含 400.00,则错误是因为在服务器的区域设置中“。”不是十进制符号。如果它为空,则意味着 ASP.NET 无法识别您的 JavaScript 更改。出于安全原因,ASP.NET 在响应时从 VIEWSTATE 恢复不可编辑的控件值,请尝试通过设置 EnableViewState = false 来禁用该控件的 VIEWSTATE。

    编辑

    顺便说一下,here 讨论了一个 ReadOnly TextBox 问题

    希望对你有帮助

    【讨论】:

    • @Arsen 已经讨论过页面中的文本框...但是我的文本框在 gridview 内...如何添加只读属性...我应该使用 rowdatabound 事件...
    • 是的,尝试在 rowdatabound 事件上设置该属性
    猜你喜欢
    • 1970-01-01
    • 2018-09-27
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 2016-10-03
    相关资源
    最近更新 更多