【问题标题】:textbox value inside a repeater and save转发器内的文本框值并保存
【发布时间】:2017-08-21 05:31:10
【问题描述】:

我在这里有一个代码,它可以在搜索栏上获取交易编号并将其显示在页面上。我还有 2 个文本框,客户将在其中输入 price 已付款和收据的 OR 编号。但是,我收到一个错误

"对象引用未设置为实例..."

.ASPX

<form id="form1" runat="server">
<div>
<asp:Repeater ID="rptrCashierTable" runat="server">
    <ItemTemplate>
        <div>
            <h1 align="center">Transaction Number: <label><%# Eval("TXNNo") %></label>

         <h2>Name:<label><%# Eval("FName") %></label>
         <label><%# Eval("MName") %></label>
         <label><%# Eval("LName") %></label></h2>             
         <h2>Contact Number: <label><%# Eval("MOBILE") %></label></h2>
         <h2>Product Ordered: <label><%# Eval("PName") %></label></h2>
         <h2>Product ID:<label><%# Eval("ProductID") %></label></h2>
         <h2>Price: 
             <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></h2>
         <h2>OR No.: 
             <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox></h2>
                <asp:Button ID="Button1" runat="server" Text="Submit" OnClick="btn_Update" />
        </div>
    </ItemTemplate>
</asp:Repeater>
</div>
</form>

.CS

public partial class TransactionDetails : System.Web.UI.Page
{
    SQLQuery sql = new SQLQuery();
    DataSet ds = new DataSet();

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BindCasierTable();
        }

    }
    private void BindCasierTable()
    {            
        string TransctID = Request.QueryString["TXNNo"];
        ds = sql.dsGetClientDetails(TransctID);

        rptrCashierTable.DataSource = ds;
        rptrCashierTable.DataBind();
    }

    protected void btn_Update(object sender, EventArgs e)
    {


        foreach (RepeaterItem item in rptrCashierTable.Items)
        {                           

            if (item.ItemType == ListItemType.Item)
            {
                var txtPrice = item.FindControl("TextBox1") as TextBox;
                var txtORNo = item.FindControl("TextBox2") as TextBox;
                string TXNNo = Request.QueryString["TXNNo"];
                ds = sql.dsAddPayment(txtPrice.Text, txtORNo.Text, TXNNo);
                txtPrice.Text = string.Empty;
                txtORNo.Text = string.Empty;
                BindCasierTable();
            }


        }
    }
}

我正在使用MSSQL 2008 和存储过程。我只想更新并把Price 支付和 OR 号码放到他们各自的字段中。

【问题讨论】:

    标签: c# asp.net sql-server sql-server-2008


    【解决方案1】:

    该错误消息意味着您正在分配具有空值的东西。我猜错误在这里弹出:

    string TransctID = Request.QueryString["TXNNo"]
    

    你应该先检查它是否为空:

    if(Request.QueryString["TXNNo"]!=null)
    {
     // make the assignation here
    }
    

    【讨论】:

    • TXNNo 有一个值,我认为这里的问题是程序无法读取文本框上的数据
    • 尝试调试它并在错误发生时粘贴确切的行,这样我们将能够更正确地帮助您。无论如何,将您的文本框放在转发器标签内可能会更改其 ID,请在您的输出 asp 网页上检查它们
    • 感谢您的回复。我试图删除中继器上的文本框,它进展顺利。祝你有美好的一天
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多