ASP.NET MVC: контакт с Полем версии

Наиболее детерминированный способ проверить, является ли обратный вызов фактическим замыканием:

function is_closure($t) {
    return $t instanceof Closure;
}

Все анонимные функции представлены в PHP как объекты типа Closure. (Что, возвращаясь к вышеупомянутому комментарию, случается, чтобы реализовать метод __invoke().)

1
задан alex2k8 14 June 2009 в 12:28
поделиться

6 ответов

В этом сообщении http://forums.asp.net/p/1401113/3032737.aspx#3032737 предлагается использовать LinqBinaryModelBinder из http://aspnet.codeplex.com/SourceControl/changeset/view/21528#338524 .

После регистрации

protected void Application_Start()
{
    ModelBinders.Binders.Add(typeof(Binary), new LinqBinaryModelBinder());
}

связыватель автоматически десериализует поле версии

public ActionResult VersionedUpdate(VersionedModel data) 
{ ... }

, отображаемое следующим образом:

<%= Html.Hidden("Version") %>

(см. Также http://stephenwalther.com/blog/archive/2009/02/25/asp .net-mvc-tip-49-use-the-linqbinarymodelbinder-in-your.aspx )

0
ответ дан 3 September 2019 в 01:26
поделиться

Я думаю, проблема в том, что он не отображается в связанная модель при отправке формы заключается в том, что для двоичного файла модели не доступен метод Convert.ToBinary () для реструктуризации данных из строки в ее двоичное представление. Если вы хотите это сделать, я думаю, вам нужно будет преобразовать значение вручную. Я' m собираюсь предположить, что значение, которое вы видите, является кодировкой двоичного значения Base64 - выводом Binary.ToString (). В этом случае вам нужно будет преобразовать его обратно из Base64 в массив байтов и передать его конструктору Binary () для восстановления значения.

Думали ли вы вместо этого о кэшировании объекта на стороне сервера? Это может быть немного сложно, так как вам нужно отсоединить объект от контекста данных (я предполагаю LINQ), иначе вы не сможете повторно подключить его к другому контексту данных. Эта запись в блоге может быть полезна, если вы решите пойти по этому пути.

Мне нужно будет преобразовать его обратно из Base64 в массив байтов и передать его конструктору Binary () для восстановления значения.

Думали ли вы вместо этого о кэшировании объекта на стороне сервера? Это может быть немного сложно, так как вам нужно отсоединить объект от контекста данных (я предполагаю LINQ), иначе вы не сможете повторно подключить его к другому контексту данных. Эта запись в блоге может быть полезна, если вы решите пойти по этому пути.

Мне нужно будет преобразовать его обратно из Base64 в массив байтов и передать его конструктору Binary () для восстановления значения.

Думали ли вы вместо этого о кэшировании объекта на стороне сервера? Это может быть немного сложно, так как вам нужно отсоединить объект от контекста данных (я предполагаю LINQ), иначе вы не сможете повторно подключить его к другому контексту данных. Эта запись в блоге может быть полезна, если вы решите пойти по этому пути.

1
ответ дан 3 September 2019 в 01:26
поделиться

Похожие сообщения я нашел.

1) http://geekswithblogs.net/frankw/archive/2008/08/29/serialization-issue-with-timestamp-in -linq-to-sql.aspx

Предлагает преобразовать «двоичную версию» в «байтовую [] версию», но некоторые комментаторы заметили:

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

2) http://geekswithblogs.net/AndrewSiemer/archive/2008/02/11/converting-a-system.data.linq.binary-or-timestamp-to-a- string-and-back.aspx

Предлагает решение, подобное моему «наивному решению»

public static string TimestampToString(this System.Data.Linq.Binary binary) 
{ ... }

public static System.Data.Linq.Binary StringToTimestamp(this string s)
{ ... }

3) http://msdn.microsoft.com/en-us/library/system.data.linq. binary.aspx

Если вы используете ASP.Net и используете Тип данных «отметка времени» SQL Server для параллелизм, вы можете захотеть преобразовать значение "отметки времени" в строку, чтобы вы можете сохранить его (например, в Интернете страница). Когда LINQ to SQL получает «метка времени» из SQL Server, она хранит это в экземпляре класса Binary. Так что вы по сути нужно преобразовать двоичный экземпляр в строку, а затем иметь возможность преобразовать строку в эквивалент Двоичный экземпляр.

Код ниже предоставляет два расширения методы для этого. Вы можете удалить "this" перед первым параметром, если вы предпочитаете, чтобы они были обычными статичными методы. Преобразование в базу 64: меры предосторожности, чтобы гарантировать, что результирующая строка содержит только отображаемые символы и без выхода символы.

public static string ConvertRowVersionToString(this Binary rowVersion) {
  return Convert.ToBase64String(rowVersion.ToArray());
}
public static Binary ConvertStringToRowVersion(this string rowVersion) {
  return new Binary(Convert.FromBase64String(rowVersion));
}
1
ответ дан 3 September 2019 в 01:26
поделиться

Возможно, вам потребуется использовать привязку, чтобы получить строго типизированный параметр для вашего метода действия.

Попробуйте выполнить рендеринг, используя:

  <%=Html.Hidden("VersionModel.Version")%>

И определите подпись вашего метода действия как:

public ActionResult VersionedUpdate([Bind(Prefix="VersionModel")] VersionedModel data)
  {     
      ...
  }
0
ответ дан 3 September 2019 в 01:26
поделиться

Есть много способов, как здесь

byte [] b = BitConverter.GetBytes (DateTime.Now.Ticks); // новый байт [(DateTime .Now) .Ticks]; _store.Version = new System.Data.Linq.Binary (b)

(убедитесь, что вы связали исключить вашу версию),

Но лучший способ - позволить БД обрабатывать это ...

{{ 1}}
0
ответ дан 3 September 2019 в 01:26
поделиться

Есть много способов, как здесь

byte [] b = BitConverter.GetBytes (DateTime.Now.Ticks); // новый байт [(DateTime .Now) .Ticks]; _ store.Version = new System.Data.Linq.Binary (b)

(убедитесь, что вы связали исключить вашу версию),

Но лучший способ - позволить БД обрабатывает это ...

0
ответ дан 3 September 2019 в 01:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: