Вопрос

В моем приложении у меня есть TextBox в FormView привязан к LinqDataSource вот так:

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

Это внутри UpdatePanel поэтому любые изменения в поле немедленно сохраняются.Также значение MyValue является decimal?.Это работает нормально, если я не введу в поле какую-либо строку, которую нельзя преобразовать в десятичное число.В этом случае UpdateItem вызов бросает:

Исключение LinqDataSourceValidationException - Не удалось установить один или несколько свойств на тип Mytype.asdf не является допустимым значением для Decimal.

Я понимаю проблему: ASP.NET не знает, как преобразовать формат asdf в десятичный формат?Я бы хотел, чтобы все эти недопустимые значения были преобразованы в ноль.Как лучше всего это сделать?

Это было полезно?

Решение

Я думаю, вам следует обработать событие обновления LinqDataSource на своей странице.Проверьте наличие недопустимых строк (используйте метод TryParse или что-то в этом роде), а затем продолжите обновление базового класса.

(Редактировать:Моя интуиция соответствует рекомендациям здесь)

Другие советы

Не знаком с ASP, но в .net не могли бы вы просто сделать что-нибудь вроде

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);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top