ASP.NET преобразует неверную строку в нулевую
-
09-06-2019 - |
Вопрос
В моем приложении у меня есть 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);
}