我正在与动态数据进行一场小规模的小冲突。我有一个自定义数据库图像字段模板,允许用户上传和编辑插入但更新不起作用的图像。我可以通过删除如果插入模式在以下代码中设置uri
的位置(在DBImage_Edit.ascx.cs中)来进行更新:
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 与数据库中的上一个值相同,即使 filecontents 和 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 注释掉)
亲切的问候,
约旦
答案 0 :(得分:0)
我独自离开了一个星期,回来后很容易想出来......有时你只需要散步,而不是过度思考这些事情。
问题在于缓存。我通过在OnDataBinding中添加一个nocache参数来更改图像处理程序URL:
<强> OLD:强>
ImageEdit.ImageUrl = "http://localhost/WebServices.CAD/ImageHandler.ashx?uri=" + row.uri;
新强>
ImageEdit.ImageUrl = "http://localhost/WebServices.CAD/ImageHandler.ashx?nocache=" + System.DateTime.Now.Ticks.ToString() + "&uri=" + row.uri;
按设计工作。