我在ASP.NET 2.0应用程序中有一个FormView控件。我有一个数据库在列中存储文件名(一个人的图片)。我无法将列的值绑定到fileupload控件 - 所以我正在尝试使用隐藏的表单字段。这就是我所拥有的:
<asp:HiddenField ID="pictureLink" runat="server" Value='<%# Bind("pictureLink") %>' />
<asp:FileUpload ID="pic" runat="server" />
代码背后:
//ItemUpdating event handler
void do_update(object sender, FormViewUpdateEventArgs e)
{
FileUpload newpic = (FileUpload)profile_edit.FindControl("pic");
if (newpic.HasFile)
{
//do a bunch of file uploading "stuff" which makes a new file name
e.Keys["pictureLink"] = new_filename;
}
}
我的目标是将隐藏的表单字段的值更新为新更新的文件名,以便正确更新数据库。
我认为我很接近 - 但似乎我无法以编程方式改变事后的任何绑定数据字段。
我尝试使用javascript来更改控件 - 但新文件名实际上与他们上传的内容不同;哪个javascript不一定“预测”并可靠地将正确的文件名放入隐藏的表单字段
有什么建议吗?
由于
答案 0 :(得分:1)
我认为你可能需要改变e.NewValues,而不是e.Keys。请参阅NewValues property on MSDN,它可能会指向正确的方向。
答案 1 :(得分:0)
好的 - 我在发布问题后发现答案的时间不长。如果有人有更好(更优雅)的解决方案,我会保持开放状态。基本上,我更改do_update事件处理程序以拦截文件上载。如果有文件,那么我编辑NewValues集合,以便数据库接收新文件名而不是旧文件名。
//ItemUpdating event handler
void do_update(object sender, FormViewUpdateEventArgs e)
{
FileUpload newpic = (FileUpload)profile_edit.FindControl("pic");
if (newpic.HasFile)
{
//do a bunch of file uploading "stuff" which makes a new file name
//HERE IS THE CHANGE - update the newvalues object to the new file name
e.NewValues[1] = new_filename;
}
}