我在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不一定能“预测”并可靠地将正确的文件名放入隐藏的表单字段中
有什么建议吗?
谢谢
发布于 2009-07-15 16:17:57
好的--我在发布问题后不久就找到了答案。我会让它开放,以防有人有更好(更优雅)的解决方案。基本上,我更改了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;
}
}发布于 2009-07-15 16:13:11
我认为你可能需要修改e.NewValues,而不是e.Keys。看看NewValues property on MSDN,它可能会给你指明正确的方向。
https://stackoverflow.com/questions/1132334
复制相似问题