ASP.NET MVC: как сохранить поле байта [] - PullRequest
1 голос
/ 21 марта 2009

У меня есть поле, тип которого - byte []. Это поле будет содержать свойство RecordVersion моей сущности (отметка времени в базе данных). Как сохранить это поле, чтобы при сохранении сущности оно было доступно?

Я пробовал две разные вещи, но пока не получилось: Это делает "System.Byte []":

<%= Html.Hidden("RecordVersion", Model.RecordVersion.ToString()) %>

В результате возникает ошибка ModelStateError, в которой тип не может быть преобразован:

ViewData["RecordVersion"] = entity.RecordVersion

По-видимому, механизм MVC по умолчанию, который выполняет связывание / открепление, не любит много полей byte [] .....

Ответы [ 3 ]

2 голосов
/ 23 марта 2009

Вам нужно сделать связыватель моделей и зарегистрировать его.

В этой статье показано, как использовать временную метку из базы данных linq в скрытом поле, очень похожее на то, что вы делаете.

 ModelBinders.Binders.Add(typeof(Binary), new LinqBinaryModelBinder()); 

В global.asax зарегистрировать его.

Что LinqBinaryModelBinder находится в сборке фьючерсов. Если вы хотите использовать byte [], вам придется написать его самостоятельно.

1 голос
/ 21 марта 2009

Вы пробовали.

<%= Html.Hidden("RecordVersion", System.Text.Encoding.Unicode.GetString(Model.RecordVersion)) %>
0 голосов
/ 21 марта 2009

Я бы не ставил отметку времени в форме. Если вы хотите сохранить объект вокруг, я бы кэшировал его на стороне сервера и извлекал его из кэша, используя идентификатор. В противном случае вы можете повторно извлечь объект из базы данных и применить изменения из данных вашей формы. Последнее, что я делаю, используя TryUpdateModel.

public ActionResult Update( int id )
{
     using (var context = new DataContext())
     {
         var model = context.Models.Where( m => m.ID == id ).Single();
         if (TryUpdateModel( model ))
         {
            ...
            context.SubmitChanges(); // wrapped in try/catch
            ...
         }
         else
         {
            ...
         }
     }
     return RedirectToAction( "Show", new { id = id } );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...