это произошло со мной, потому что я попытался выполнить access UI
компонент в another thread insted of UI thread
, как этот
private void button_Click(object sender, RoutedEventArgs e)
{
new Thread(SyncProcces).Start();
}
private void SyncProcces()
{
string val1 = null, val2 = null;
//here is the problem
val1 = textBox1.Text;//access UI in another thread
val2 = textBox2.Text;//access UI in another thread
localStore = new LocalStore(val1);
remoteStore = new RemoteStore(val2);
}
, чтобы решить эту проблему, обернуть любой вызов ui внутри , о чем упоминал Кандид в своем ответе
private void SyncProcces()
{
string val1 = null, val2 = null;
this.Dispatcher.Invoke((Action)(() =>
{//this refer to form in WPF application
val1 = textBox.Text;
val2 = textBox_Copy.Text;
}));
localStore = new LocalStore(val1);
remoteStore = new RemoteStore(val2 );
}
У нас есть устаревшая система, которая использует триггер и dbmail для отправки электронной почты в кодировке HTML при вводе таблицы, поэтому нам требуется кодирование при создании электронной почты. Я заметил, что в версии Лео есть небольшая ошибка, которая кодирует & in & lt;
и & gt;
Я использую эту версию:
CREATE FUNCTION HtmlEncode
(
@UnEncoded as varchar(500)
)
RETURNS varchar(500)
AS
BEGIN
DECLARE @Encoded as varchar(500)
--order is important here. Replace the amp first, then the lt and gt.
--otherwise the < will become &lt;
SELECT @Encoded =
Replace(
Replace(
Replace(@UnEncoded,'&','&'),
'<', '<'),
'>', '>')
RETURN @Encoded
END
GO
Вы не должны чинить строку в SQL. Лучший путь состоит в том, чтобы использовать функцию в ASP.net по имени HtmlEncode, это приготовит специальные символы, которые вызывают проблемы, которые Вы видите, посмотрите пример ниже. Я надеюсь, что это помогает.
string htmlEncodedStr = System.Web.HttpUtility.HtmlEncode(yourRawStringVariableHere);
string decodedRawStr = System.Web.HttpUtility.HtmlDecode(htmlEncodedStr);
Редактирование: Так как Вы - привязка данных это из таблицы данных. Используйте встроенное выражение для вызова HTMLEncode в разметке GridView или безотносительно управления использование, и это все еще удовлетворит требование привязки данных. Посмотрите пример ниже. Alternativly можно циклично выполнить каждую запись в объекте таблицы данных и обновить каждую ячейку с закодированной строкой HTML до привязки данных.
<%# System.Web.HttpUtility.HtmlEncode(Eval("YourColumnNameHere")) %>
Я не думаю, что данные в базе данных должны знать или заботиться о пользовательском интерфейсе. Проблемы дисплея должны быть обработаны уровнем представления. Я не хотел бы видеть любой HTML, смешанный в базу данных.
При отображении строки в сети можно закодировать ее Сервером. HTMLEncode ().
при хранении строки в базе данных удостоверьтесь, что поле базы данных является "nchar" вместо "символа". Это позволит этому хранить строки unicode.
, Если Вы не можете управлять базой данных, можно "сгладить" строку к ASCII с Кодированием. ASCII.GetString.
Хорошо вот то, что я сделал. Я создал простую функцию для обработки его. Его совсем не завершенный, но по крайней мере обрабатывает стандарт <>&
символы. Я просто добавлю к нему, поскольку я продвигаюсь.
CREATE FUNCTION HtmlEncode
(
@UnEncoded as varchar(500)
)
RETURNS varchar(500)
AS
BEGIN
DECLARE @Encoded as varchar(500)
SELECT @Encoded = Replace(@UnEncoded,'<','<')
SELECT @Encoded = Replace(@Encoded,'>','>')
SELECT @Encoded = Replace(@Encoded,'&','&')
RETURN @Encoded
END
я могу тогда использовать:
Select Ref,dbo.HtmlEncode(RecID) from Customers
Это дает мне HTML безопасный Рекордный идентификатор. Существует, вероятно, созданный в функции, но я не могу найти его.