У меня есть свойство int? MyProperty
как участник в моем источнике данных (ObjectDataSource). Я могу связать это с TextBox, как
<asp:TextBox ID="MyTextBox" runat="server" Text='<%# Bind("MyProperty") %>' />
В основном я хочу получить a null
значение, отображенное как пробел ""
в TextBox и числе как число. Если TextBox является пробелом MyProperty
буду установлен на null
. Если TextBox имеет число в нем, MyProperty должен быть установлен на это число.
Если я пробую его, я получаю исключение: "Пробел не является допустимым Int32".
Но как я могу сделать это? Как работать с nullable свойствами и Связать?
Заранее спасибо!
<asp:TextBox ID="MyTextBox" runat="server"
Text='<%# Bind("MyProperty").HasValue ? Bind("MyProperty") : "" %>' />
Вы можете использовать HasValue, чтобы определить, имеет ли тип, допускающий значение NULL, значение NULL, а затем установить свойство Text.
Я начинаю верить, что невозможно привязать свойство значения, допускающее значение NULL. Пока я вижу только обходной путь: добавить дополнительное вспомогательное свойство для привязки обнуляемого типа:
public int? MyProperty { get; set; }
public string MyBindableProperty
{
get
{
if (MyProperty.HasValue)
return string.Format("{0}", MyProperty);
else
return string.Empty;
}
set
{
if (string.IsNullOrEmpty(value))
MyProperty = null;
else
MyProperty = int.Parse(value);
// value should be validated before to be an int
}
}
, а затем привязать вспомогательное свойство к TextBox вместо оригинала:
<asp:TextBox ID="MyTextBox" runat="server"
Text='<%# Bind("MyBindableProperty") %>' />
Я был бы рад увидеть другое решение.