이미지를 표시하기 위해 프로그래밍 방식으로 목록보기가 만들어졌습니다. 당신이 다운로드를 클릭하면 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를 사용할 수 있지만이 컨트롤에서는 사용하지 않습니다.
나는 viewstate/state management와 관련이 있다고 생각합니다. listview를 빌드하는 코드를 게시 할 수 있습니까? – Peter