Pergunta

Na minha aplicação eu tenho TextBox em um FormView vinculado a um LinqDataSource igual a:

<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);
}

Isto está dentro de um UpdatePanel portanto, qualquer alteração no campo será imediatamente persistida.Além disso, o valor de MyValue é decimal?.Isso funciona bem, a menos que eu insira qualquer string que não possa ser convertida em decimal no campo.Nesse caso, o UpdateItem chamada lança:

LinqDataSourceValidationException - Falha ao definir uma ou mais propriedades no tipo MyType.asdf não é um valor válido para Decimal.

Entendo o problema, o ASP.NET não sabe converter de 'asdf' para decimal?.O que eu gostaria de fazer é converter todos esses valores inválidos em nulos.Qual é a melhor maneira de fazer isso?

Foi útil?

Solução

Acho que você deveria lidar com o evento Updating do LinqDataSource na sua página.Verifique se há strings inválidas (use um método TryParse ou algo assim) e continue com a atualização da classe base.

(Editar:Minha intuição está alinhada com o que é recomendado aqui)

Outras dicas

Não estou familiarizado com ASP, mas em .net, você não poderia simplesmente fazer algo como

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top