Pregunta

En mi aplicación tengo TextBox en un FormView enlazado a un LinqDataSource así:

<asp:TextBox ID="MyTextBox" runat="server" 
             Text='<%# Bind("MyValue") %>' AutoPostBack="True" 
             ontextchanged="MyTextBox_TextChanged" />

protected void MyTextBox_TextChanged(object sender, EventArgs e)
{
    MyFormView.UpdateItem(false);
}

Este es el interior de un UpdatePanel por lo que cualquier cambio en el campo es inmediatamente persistió.Además, el valor de MyValue es decimal?.Esto funciona bien a menos que yo escriba cualquier cadena que no puede ser convertido a decimal en el campo.En ese caso, el UpdateItem llamar a los tiros:

LinqDataSourceValidationException - No se pudo establecer una o más propiedades de tipo MyType.asdf no es un valor válido para el separador Decimal.

Entiendo el problema, ASP.NET no sabe cómo convertir de 'asdf' a decimal?.Lo que me gustaría hacer es convertir todos estos valores no válidos nulos.¿Cuál es la mejor manera de hacer esto?

¿Fue útil?

Solución

Creo que se debe controlar la Actualización de los eventos de la LinqDataSource en su página.Haga su cheque de cadenas no válidas (el uso de un método TryParse o algo) y, a continuación, continuar con la clase base de la actualización.

(Edición:Mi intuición líneas con lo que se recomienda aquí)

Otros consejos

No familiarizado con ASP, pero en .neta, no podía simplemente hacer algo a lo largo de las líneas de

protected void MyTextBox_TextChanged(object sender, EventArgs e)
{ 
    Decimal d = null;
    TextBox tb = sender as TextBox;

    if(!Decimal.TryParse(tb.Text, out d))
    {
            tb.Text = String.Empty;
    }
    MyFormView.UpdateItem(false);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top