Окружение
VS 2013 , Developer Express компоненты DXperience 14.1.8Проблема
Возникла проблема с полем в БД с именем "Number", точнее, с отображением его в виде текстбокса.@Html.DevExpress().TextBox(
settings =>
{
settings.Name = "Number";
...
Разрабатываю веб-приложение на DevExpress компоеннтах.
В базе данных сделал у документа поле с именем Number (номер документа).
Работа с БД через EntityFramework.
Делаю форму редактирования документа.
Поле хочу отобразить девэкспрессовским текстбоксом, естественно привязанным к полю в БД. Как только вставлю на страницу такой код
@Html.DevExpress().TextBox(
settings =>
{
settings.Name = "DocNumber";
settings.ControlStyle.CssClass = "editor";
}
).Bind(Model.DocNumber).GetHtml()
страница валится.
Методом проб и ошибок пришел к тому, что если переименовать поле в БД на какое-либо другое имя, например Num, то все начинает работать нормально.
Но, согласитесь, коробит, когда приходится из-за веб-компонетов вносить какие-то изменения в БД.
Гугление вывело на статью поддержки
https://www.devexpress.com/Support/Center/Question/Details/KA20013
Из которой стало понятно, что Number перекрыватеся с типом JavaScript
Соответственно, не рекомендуют называть DevExpress компоненты именами типа
String
Number
Boolean
Object
Date
Array
Undefined
Null
etc.
Решение
Переименовывать поле в БД не хотелось, соответственно я пришел к компромиссному решению: расширил модель документа, а именно добавил в неё обверточное поле.Конкретная реализация - через добавление партиал класса
public partial class DocMenu
{
/// <summary>
/// поле-обвертка для стандартных DevExpress Web компонентов,
/// </summary>
public int DocNumber
{
get { return Number; }
set { Number = value; }
}
}
Мне это показалось достаточным компромиссом, хотя, возможно аналогичное решение можно сделать и через наследование.
Комментариев нет:
Отправить комментарий