Наиболее детерминированный способ проверить, является ли обратный вызов фактическим замыканием:
function is_closure($t) {
return $t instanceof Closure;
}
Все анонимные функции представлены в PHP как объекты типа Closure
. (Что, возвращаясь к вышеупомянутому комментарию, случается, чтобы реализовать метод __invoke()
.)
В этом сообщении 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 )
Я думаю, проблема в том, что он не отображается в связанная модель при отправке формы заключается в том, что для двоичного файла модели не доступен метод Convert.ToBinary () для реструктуризации данных из строки в ее двоичное представление. Если вы хотите это сделать, я думаю, вам нужно будет преобразовать значение вручную. Я' m собираюсь предположить, что значение, которое вы видите, является кодировкой двоичного значения Base64 - выводом Binary.ToString (). В этом случае вам нужно будет преобразовать его обратно из Base64 в массив байтов и передать его конструктору Binary () для восстановления значения.
Думали ли вы вместо этого о кэшировании объекта на стороне сервера? Это может быть немного сложно, так как вам нужно отсоединить объект от контекста данных (я предполагаю LINQ), иначе вы не сможете повторно подключить его к другому контексту данных. Эта запись в блоге может быть полезна, если вы решите пойти по этому пути.
Мне нужно будет преобразовать его обратно из Base64 в массив байтов и передать его конструктору Binary () для восстановления значения.Думали ли вы вместо этого о кэшировании объекта на стороне сервера? Это может быть немного сложно, так как вам нужно отсоединить объект от контекста данных (я предполагаю LINQ), иначе вы не сможете повторно подключить его к другому контексту данных. Эта запись в блоге может быть полезна, если вы решите пойти по этому пути.
Мне нужно будет преобразовать его обратно из Base64 в массив байтов и передать его конструктору Binary () для восстановления значения.Думали ли вы вместо этого о кэшировании объекта на стороне сервера? Это может быть немного сложно, так как вам нужно отсоединить объект от контекста данных (я предполагаю LINQ), иначе вы не сможете повторно подключить его к другому контексту данных. Эта запись в блоге может быть полезна, если вы решите пойти по этому пути.
Похожие сообщения я нашел.
Предлагает преобразовать «двоичную версию» в «байтовую [] версию», но некоторые комментаторы заметили:
Проблема с этим подходом заключается в том, что это не сработает, если вы хотите использовать Таблица.Приложение (модифицированное, оригинальное) перегрузка, например, когда вы используете отключенный контекст данных.
Предлагает решение, подобное моему «наивному решению»
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));
}
Возможно, вам потребуется использовать привязку, чтобы получить строго типизированный параметр для вашего метода действия.
Попробуйте выполнить рендеринг, используя:
<%=Html.Hidden("VersionModel.Version")%>
И определите подпись вашего метода действия как:
public ActionResult VersionedUpdate([Bind(Prefix="VersionModel")] VersionedModel data)
{
...
}
Есть много способов, как здесь
byte [] b = BitConverter.GetBytes (DateTime.Now.Ticks); // новый байт [(DateTime .Now) .Ticks]; _store.Version = new System.Data.Linq.Binary (b)
(убедитесь, что вы связали исключить вашу версию),
Но лучший способ - позволить БД обрабатывать это ...
{{ 1}}Есть много способов, как здесь
byte [] b = BitConverter.GetBytes (DateTime.Now.Ticks); // новый байт [(DateTime .Now) .Ticks]; _ store.Version = new System.Data.Linq.Binary (b)
(убедитесь, что вы связали исключить вашу версию),
Но лучший способ - позволить БД обрабатывает это ...