2013-03-19 2 views
0

Я занимаюсь небольшой перестрелкой с динамическими данными. У меня есть шаблон поля пользовательского шаблона базы данных, позволяющий пользователям загружать и редактировать изображения, где вставка работает, но обновление нет. Я могу сделать работу обновления, удаления режима если вставки вокруг, где uri устанавливается в следующем коде (в DBImage_Edit.ascx.cs):Шаблон поля динамических данных ASP.NET

protected override void ExtractValues(IOrderedDictionary dictionary) 
{ 
    ... 
    dictionary["contenttype"] = "image/" + imgext; 
    dictionary["filecontents"] = new System.Data.Linq.Binary(FileUploadEdit.FileBytes); 
    if (Mode == DataBoundControlMode.Insert) 
    { 
    dictionary["uri"] = imgname + "_" + DateTimeOffset.Now.Ticks.ToString() + "." + imgext; 
    } 
    ... 
} 

Напомним, что если URI установлен в что-то другое, чем предыдущее значение в БД при редактировании , новое изображение загружено успешно. Если uri совпадает с предыдущим значением в БД, хотя файлы и contenttype изменены, SQL Server никогда не получает новости.

Метаданные:

... 
[DisplayName("Uri")] 
[ScaffoldColumn(true)] 
[Required] 
public object uri { get; set; } 

[DisplayName("Graphic")] 
[ScaffoldColumn(true)] 
[UIHint("DBImage")] 
public object filecontents { get; set; } 
... 

Я также удалил UpdateCheck но это не похоже, чтобы изменить поведение:

[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_filecontents", DbType="VarBinary(MAX)")] //, UpdateCheck=UpdateCheck.Never 
public System.Data.Linq.Binary filecontents 
    { 
    get 
    { 
... 

(см закомментирована UpdateCheck = UpdateCheck.Never)

С уважением,

Jordan

ответ

0

Я оставил его в покое в течение недели, вернулся и понял это легко .. иногда вам просто нужно пойти на прогулку, а не по-думать, эти вещи.

Вопрос был кешированием. Я изменил обработчик URL изображения путем добавления NoCache параметров в OnDataBinding:

OLD:

ImageEdit.ImageUrl = "http://localhost/WebServices.CAD/ImageHandler.ashx?uri=" + row.uri; 

NEW:

ImageEdit.ImageUrl = "http://localhost/WebServices.CAD/ImageHandler.ashx?nocache=" + System.DateTime.Now.Ticks.ToString() + "&uri=" + row.uri; 

как задумано.