Domanda

Nella mia domanda ho TextBox in un FormView vincolato ad a LinqDataSource così:

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

Questo è all'interno di un UpdatePanel quindi qualsiasi modifica al campo viene immediatamente mantenuta.Inoltre, il valore di MyValue È decimal?.Funziona bene a meno che non inserisco una stringa che non può essere convertita in decimale nel campo.In tal caso, il UpdateItem la chiamata lancia:

LinqDataSourceValidationException - Impossibile impostare una o più proprietà su tipo myType.asdf non è un valore valido per Decimal.

Capisco il problema, ASP.NET non sa come convertire da "asdf" a decimale?.Quello che vorrei che facesse è convertire tutti questi valori non validi in null.Qual è il modo migliore per farlo?

È stato utile?

Soluzione

Penso che dovresti gestire l'evento Updating di LinqDataSource sulla tua pagina.Controlla la presenza di stringhe non valide (usa un metodo TryParse o qualcosa del genere) e poi continua con l'aggiornamento della classe base.

(Modificare:La mia intuizione è in linea con ciò che è raccomandato Qui)

Altri suggerimenti

Non ho familiarità con ASP, ma in .net, non potresti semplicemente fare qualcosa sulla falsariga di

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);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top