已經以編程方式創建了一個用於顯示圖像的列表視圖。當你點擊下載ItemCommand被激發,並在瀏覽器向用戶發送圖像作爲二元響應,使用以下:恢復ASP.NET響應標題
SPFile ImageIfile = spfolder.Files[ServerName];
byte[] bs = ImageIfile.OpenBinary();
string res = Page.Response.ContentType;
Page.Response.ContentType = "image/jpeg";
Page.Response.AppendHeader("Content-Disposition", "attachment; filename=" + Path.GetFileName(fileName))
Page.Response.BinaryWrite(bs);
Page.Response.End();
這工作,正好一次。然後,無論是下載鏈接,還是DataPage頁面控制器都不會工作,直到刷新(確實是任何回發)。
編輯:這是一個SharePoint 2007的WebPart,這是在CreateChildControls方法ListView控件的聲明:
lv.ItemPlaceholderID = "itemPlaceholder";
lv.GroupPlaceholderID = "groupPlaceholder";
lv.ID = "MediaSearch";
lv.LayoutTemplate = new LayoutTemplate();
lv.GroupTemplate = new GroupTemplate();
lv.GroupItemCount = 4;
lv.ItemTemplate = new ItemTemplate();
lv.EmptyDataTemplate = this.Page.LoadTemplate("/usercontrols/MediaResults_Empty.ascx");
這是ItemTemplate模板和數據綁定
public class ItemTemplate : ITemplate
{
public void InstantiateIn(Control container)
{
//Top bit
Panel ItemPanel = new Panel();
ItemPanel.ID = "itemPlaceholder";
ItemPanel.Attributes["class"] = "mlitem";
var thumbdiv = new HtmlGenericControl("div");
thumbdiv.Attributes["class"] = "thumb-image";
HyperLink aspLink = new HyperLink();
aspLink.ID = "hlPicPreview";
aspLink.Attributes["class"]="picture-preview";
Image aspImg = new Image();
aspImg.ID = "thumb";
aspLink.Controls.Add(aspImg);
thumbdiv.Controls.Add(aspLink);
ItemPanel.Controls.Add(thumbdiv);
//Bottom bit
var bDiv = new HtmlGenericControl("div");
bDiv.Attributes["class"] = "details";
var UnOrderedList = new HtmlGenericControl("ul");
var li1 = new HtmlGenericControl("li");
Literal lit = new Literal();
lit.ID = "liSize";
lit.Text = "Size";
li1.Controls.Add(lit);
var li2 = new HtmlGenericControl("li");
LinkButton down = new LinkButton();
down.ID = "lbDownload";
down.CommandArgument = "Pugs";
down.CommandName = "Download";
down.Text = "Download";
li2.Controls.Add(down);
UnOrderedList.Controls.Add(li1);
UnOrderedList.Controls.Add(li2);
bDiv.Controls.Add(UnOrderedList);
ItemPanel.Controls.Add(bDiv);
ItemPanel.DataBinding += new EventHandler(ItemPanel_DataBinding);
container.Controls.Add(ItemPanel);
}
void ItemPanel_DataBinding(object sender, EventArgs e)
{
Panel ThePanel = (Panel)sender;
//Get bindables
Image thumb = ThePanel.FindControl("thumb") as Image;
LinkButton lbdown = ThePanel.FindControl("lbDownload") as LinkButton;
ListViewDataItem lvdi = (ListViewDataItem)ThePanel.NamingContainer;
//Bind that stuff.
lbdown.CommandArgument = ((DataRowView)lvdi.DataItem)["URL"].ToString();
thumb.ImageUrl = "~/" + ((DataRowView)lvdi.DataItem)["ThumbsNailsImg"].ToString();
}
我多一點在這裏難倒了。 AJAX已在網站上啓用,但未在此控件中使用。
我認爲這與視圖狀態/狀態管理有關,只是猜測。你能發佈構建listview的代碼嗎? – Peter 2010-06-21 16:45:15