0

我们使用 string.Format("{0:(###) ###-####}" 在 DetailsView 中显示格式化的电话号码。电话号码的示例是:

(516) 123-4567

<asp:TemplateField HeaderText="Primary Phone:" SortExpression="PrimaryPhone">

    <EditItemTemplate>
        <asp:TextBox ID="TextBoxPrimaryPhoneEdit" runat="server" Text='<%# Bind("PrimaryPhone") %>'></asp:TextBox>
    </EditItemTemplate>

    <InsertItemTemplate>
        <asp:TextBox ID="TextBoxPrimaryPhoneInsert" runat="server" Text='<%# Bind("PrimaryPhone") %>'></asp:TextBox>
    </InsertItemTemplate>

    <ItemTemplate>
        <asp:Literal ID="PrimaryPhoneLiteral" runat="server" 
            Text='<%# iif(Len(Eval("PrimaryPhone"))=10,
            string.Format("{0:(###) ###-####}", Int64.Parse(Eval("PrimaryPhone").ToString())),
            Eval("PrimaryPhone")) %>' />
    </ItemTemplate>

    <ItemStyle ForeColor="Blue" />
</asp:TemplateField>

当电话号码正好是 10 个号码时,它的格式很好,它允许用户编辑电话。我们遇到的问题是当用户删除电话号码并尝试单击更新按钮时。即使数据库表列确实允许空值,但在用户在 TextBox 中键入内容之前,不会保存数据。

我在编码中犯了错误吗?我们希望以这种方式设置它,以防用户在单击更新按钮之前清除手机文本框。

4

1 回答 1

1

我过去犯的一个错误是,如果文本框为空,您也需要将相应的变量设置为空。

例如,我的代码看起来像:

if (TextBox1.Text.Trim() != String.Empty)
{
    myObj.TextContent = TextBox1.Text;
}

但是在控件为空的情况下,需要将对应的变量设置为null:

if (TextBox1.Text.Trim() != String.Empty)
{
    myObj.TextContent = TextBox1.Text;
}
else
{
    myObj.TextContent = null;
}

编辑:

老实说,我真的只使用代码背后的东西,所以对 aspx 方面不太熟悉(比如模板字段等等)。但无论如何,假设您可以访问所需控件的内容(我将其称为 PhoneNumberTextBox),并假设您有一个名为 UpdateButton 的按钮:

protected void UpdateButton_Click(object sender, EventArgs e)
{
    //this event runs on click of the button
    Customer theGuy = new Customer();

    if (PhoneNumberTextBox.Text.Trim() != String.Empty)
    {
        theGuy.PhoneNumber = PhoneNumberTextBox.Text;
    }
    else //the control is empty
    {
        theGuy.PhoneNumber = null;
    }

    CustomerManager.Save(theGuy);
}

public static class CustomerManager
{
    public static void Save(Customer customer)
    {
        using (SqlConnection myconn = new SqlConnection(SQLHelper.SCOnline2ConnStr))
        {
            SqlCommand sqlcmd = new SqlCommand("CustomerManagement.sprocSaveCustomer", myconn);
            sqlcmd.CommandType = CommandType.StoredProcedure;
            sqlcmd.Parameters.Add("@PhoneNumber", SqlDbType.NVarChar);

            sqlcmd.Parameters["@PhoneNumber"].Value =
                (customer.PhoneNumber == null) ?
                (object)DBNull.Value : customer.PhoneNumber;

            myconn.Open();
            sqlcmd.ExecuteNonQuery();
            myconn.Close();
        }
    }
}
于 2012-10-05T01:45:01.900 回答