ASP.NET converte string inválida em nula
-
09-06-2019 - |
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?
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);
}