我试图让一个aspx DataGrid控件执行后,结果在一个局部回传(异步),而不是一个完整的回发。我已经添加的ScriptManager,更新面板和内容模板的包装,但它仍然刷新页面,当我选择一个数据项,然后单击添加。
< ASP:ScriptManager的ID =ScriptManager1=服务器的EnablePartialRendering =真>< / ASP:ScriptManager的>
< ASP:UpdatePanel的ID =upPnlLookup=服务器的UpdateMode =条件ChildrenAsTriggers =真>
<的ContentTemplate>
< ASP:DataGrid的ID =ObjectPropertiesDataGrid的cellpadding =5CELLSPACING =5OnItemCommand =ObjectPropertiesDataGrid_ItemCommandOnItemDataBound =ObjectPropertiesDataGrid_ItemDataBound的AutoGenerateColumns =假的CssClass =列表DataKeyField =ID=服务器 >
< ASP:TemplateColumn中>
<的ItemTemplate>
< ASP:面板ID =multiValuePanel可见=假=服务器>
<表>
&其中; TR>
< TD VALIGN =顶>
< ASP:按钮的ID =Add按钮的CssClass =按钮的CommandName =的AddValueWIDTH =65px文本=添加=服务器>< / ASP:按钮>
< ASP:按钮的ID =addAllButton的CssClass =按钮的CommandName =AddAllValueWIDTH =85px文本=全部添加=服务器>< / ASP:按钮>
< BR />
< ASP:列表框ID =listBoxValuesWIDTH =250像素的CssClass =列表框的SelectionMode =多=服务器>< / ASP:列表框>
< / TD>
< TD VALIGN =顶>
< ASP:按钮的ID =removeButton的CssClass =键文本=删除WIDTH =65px的CommandName =RemoveValue=服务器>< / ASP:按钮>
< ASP:按钮的ID =removeAllButton的CssClass =键文本=全部删除WIDTH =85px的CommandName =RemoveAllValue=服务器>< / ASP:按钮>
< BR />
< ASP:列表框ID =listBoxCurrentValuesWIDTH =250像素的CssClass =列表框的SelectionMode =多=服务器>< / ASP:列表框>
< / TD>
< / TR>
< /表>
< / ASP:面板>
< / ItemTemplate中>
< / ASP:TemplateColumn中>
< / ASP:DataGrid的>
< /的ContentTemplate>
<触发器>
< ASP:AsyncPostBackTrigger控件ID =Add按钮事件名称=点击/>
< ASP:AsyncPostBackTrigger控件ID =removeButton事件名称=点击/>
< ASP:AsyncPostBackTrigger控件ID =addAllButton事件名称=点击/>
< ASP:AsyncPostBackTrigger控件ID =removeAllButton事件名称=点击/>
< /触发器>
< / ASP:UpdatePanel的>
code背后(片段/相关方法):
保护无效的Page_Load(对象发件人,EventArgs的)
{
SaveButton.Click + = SaveButton_Click;
btnAddChild.Click + = btnAddChild_Click;
btnAddChildTop.Click + = btnAddChildTop_Click;
DeleteButton.Click + = DeleteButton_Click;
CancelButton.Click + = CancelButton_Click;
CopyButton.Click + = CopyButton_Click;
NewButton.Click + = NewButton_Click;
AddSiteButton.Click + = AddSiteButton_Click;
RemoveSiteButton.Click + = RemoveSiteButton_Click;
ActivateAll.Click + = ActivateAll_Click;
DeactivateAll.Click + = DeactivateAll_Click;
startDateCalender.SelectionChanged + = startDateCalender_SelectionChanged;
endDateCalender.SelectionChanged + = endDateCalender_SelectionChanged;
startDateCalender.Load + = startDateCalender_Load;
endDateCalender.Load + = endDateCalender_Load;
CacheButton.Click + = CacheButton_Click;
如果(的IsPostBack)
返回;
如果(String.IsNullOrEmpty(请求[ID]))
{
的Response.Redirect(Default.aspx的);
}
其他
{
LoadData();
}
}
私人无效LoadData()
{
。属性= ContentProviderFactory.GetContentProvider()GetObjectTypeProperties(CurrentContentObject.Type,假);
uploadImage.DataSource = DataHelper.GetObjecTypeImageSizes(CurrentContentObject.Type);
uploadImage.Container = CurrentContentObject;
从属性属性P的foreach(VAR财产
让OBJECTPROPERTY = CurrentContentObject.GetProperty(p.Id)
其中,OBJECTPROPERTY == NULL
选择P)
{
CurrentContentObject.Items.Add(属性);
}
ObjectPropertiesDataGrid.DataSource =属性;
VAR孩子= ContentProviderFactory.GetContentProvider()GetContentObjectChildren(CurrentContentObject.Id)。
dgObjectChildren.DataSource = children.Where(C => c.Active);
dgObjectInactiveChildren.DataSource = children.Where(C =>!c.Active);
dgObjectParents.DataSource = ContentProviderFactory.GetContentProvider()GetContentObjectParents(CurrentContentObject)。
ddlContentTypes.DataSource = ContentProviderFactory.GetContentProvider()GetContentObjectTypes(CurrentContentObject.Type)。
ddlContentTypesTop.DataSource = ContentProviderFactory.GetContentProvider()GetContentObjectTypes(CurrentContentObject.Type)。
SitesListBox.DataSource = ContentProviderFactory.GetContentProvider()GetContentObjectSitesAvailable(CurrentContentObject.Id)。
SetSitesListBox.DataSource = ContentProviderFactory.GetContentProvider()GetContentObjectSites(CurrentContentObject.Id)。
如果(CurrentContentObject.Id == 0)
{
Response.Status =301永久移动;
Response.AddHeader(位置,/admin/Contentobjects/ObjectNotFound.aspx);
到Response.End();
}
常量字符串DATE_FORMAT =MM / DD / YYYY;
如果(CurrentContentObject.StartDate.ToString(DATE_FORMAT)!= SqlDateTime.MinValue.Value.ToString(DATE_FORMAT))
{
startDateTextBox.Text = CurrentContentObject.StartDate.ToShortDateString();
}
如果(CurrentContentObject.EndDate.ToString(DATE_FORMAT)!= SqlDateTime.MaxValue.Value.ToString(DATE_FORMAT))
{
endDateTextBox.Text = CurrentContentObject.EndDate.Date.ToShortDateString();
}
的DataBind();
//如果一个孤儿/儿童,删除添加子按钮和下拉
如果(ddlContentTypes.Items.Count == 0)
{
btnAddChild.Visible = FALSE;
ddlContentTypes.Visible = FALSE;
}
如果(ddlContentTypesTop.Items.Count == 0)
{
ddlContentTypesTop.Visible = FALSE;
btnAddChildTop.Visible = FALSE;
}
//添加删除确认的JavaScript
DeleteButton.Attributes [的onclick] =返回confirm_object_delete();;
RenderTypeHeader();
RenderBreadcrumb();
如果(CurrentContentObject.ParentId == 0)
{
UserInfo.AddToHistory(CurrentContentObject.Id,CurrentContentObject.Name);
}
其他
{
UserInfo.AddToHistory(CurrentContentObject.Parent.Id,CurrentContentObject.Parent.Name);
}
startCalenderPanel.Visible = FALSE;
endCalenderPanel.Visible = FALSE;
}
保护无效ObjectPropertiesDataGrid_ItemCommand(对象发件人,DataGridCommandEventArgs E)
{
VAR ID =(int)的ObjectPropertiesDataGrid.DataKeys [e.Item.ItemIndex]
开关(e.CommandName.ToLower())
{
案clearimage:
{
//删除图像(不物理删除图像,但如果新的一个新的更新将被取代)
VAR imageProperty = e.Item.FindControl(imageProperty)的图像;
VAR tbFileName = e.Item.FindControl(tbFileName)的文本框;
tbFileName.Text =的String.Empty;
imageProperty.ImageUrl =的String.Empty;
打破;
}
案创值:
{
//添加一个属性值型属性的列表
VAR listBoxValues = e.Item.FindControl(listBoxValues)作为列表框;
VAR listBoxCurrentValues = e.Item.FindControl(listBoxCurrentValues)作为列表框;
的foreach(;列表项>()式(项目=>以listBoxValues.Items.Cast&LT VAR项目item.Selected))
{
//添加物品到设定值
listBoxCurrentValues.Items.Add(项目);
}
对于(VAR I = listBoxValues.Items.Count - 1; I> = 0;我 - )
{
如果(listBoxCurrentValues.Items.FindByValue(listBoxValues.Items [I] .value的)!= NULL)
{
listBoxValues.Items.RemoveAt(ⅰ);
}
}
SortListBox(listBoxCurrentValues);
打破;
}
案removevalue:
{
VAR listBoxValues = e.Item.FindControl(listBoxValues)作为列表框;
VAR listBoxCurrentValues = e.Item.FindControl(listBoxCurrentValues)作为列表框;
对于(VAR I = listBoxCurrentValues.Items.Count - 1; I> = 0;我 - )
{
如果(listBoxCurrentValues.Items [I] .Selected)
{
listBoxValues.Items.Add(listBoxCurrentValues.Items [I]);
listBoxCurrentValues.Items.RemoveAt(ⅰ);
}
}
SortListBox(listBoxValues);
打破;
}
案addallvalue:
{
VAR listBoxValues = e.Item.FindControl(listBoxValues)作为列表框;
VAR listBoxCurrentValues = e.Item.FindControl(listBoxCurrentValues)作为列表框;
的foreach(在listBoxValues.Items列表项项)
{
//添加物品到设定值
listBoxCurrentValues.Items.Add(项目);
}
对于(VAR I = listBoxValues.Items.Count - 1; I> = 0;我 - )
{
如果(listBoxCurrentValues.Items.FindByValue(listBoxValues.Items [I] .value的)!= NULL)
{
listBoxValues.Items.RemoveAt(ⅰ);
}
}
SortListBox(listBoxCurrentValues);
打破;
}
案removeallvalue:
{
VAR listBoxValues = e.Item.FindControl(listBoxValues)作为列表框;
VAR listBoxCurrentValues = e.Item.FindControl(listBoxCurrentValues)作为列表框;
对于(VAR I = listBoxCurrentValues.Items.Count - 1; I> = 0;我 - )
{
listBoxValues.Items.Add(listBoxCurrentValues.Items [I]);
listBoxCurrentValues.Items.RemoveAt(ⅰ);
}
SortListBox(listBoxValues);
打破;
}
案addalldatalistvalue:
{
VAR dataListValues = e.Item.FindControl(DataListValues)作为DataList控件;
VAR dataListCurrentValues = e.Item.FindControl(CurrentDataListValues)作为DataList控件;
的foreach(在dataListValues.Items的DataListItem项)
{
IMAGELINK ImageLink的= ImageLinks [ID] [item.ItemIndex]
CurrentImageLinks [ID]。新增(IMAGELINK);
}
对于(VAR I = dataListValues.Items.Count - 1; I> = 0;我 - )
{
如果(CurrentImageLinks [ID]。载(ImageLinks [ID] [I]))
{
ImageLinks [ID] .RemoveAt(我);
}
}
dataListValues.DataSource = ImageLinks [ID]
dataListCurrentValues.DataSource = CurrentImageLinks [ID]
dataListValues.DataBind();
dataListCurrentValues.DataBind();
打破;
}
案removealldatalistvalue:
{
VAR dataListValues = e.Item.FindControl(DataListValues)作为DataList控件;
VAR dataListCurrentValues = e.Item.FindControl(CurrentDataListValues)作为DataList控件;
对于(VAR I = dataListCurrentValues.Items.Count - 1; I> = 0;我 - )
{
ImageLinks [ID]。新增(CurrentImageLinks [ID] [I]);
CurrentImageLinks [ID] .RemoveAt(我);
}
dataListValues.DataSource = ImageLinks [ID]
dataListCurrentValues.DataSource = CurrentImageLinks [ID]
dataListValues.DataBind();
dataListCurrentValues.DataBind();
打破;
}
}
}
解决方案
也试试这个:
控制我=的FindControl(Request.Params.Get(__ EVENTTARGET));
如果(的FindControl(我= Add按钮和放大器;!&安培;我= removeButton和放大器;!&安培;!我= addAllButton和放大器;&安培;!我= removeAllButton)
{
如果(的IsPostBack)
返回;
如果(String.IsNullOrEmpty(请求[ID]))
{
的Response.Redirect(Default.aspx的);
}
其他
{
LoadData();
}
}
I'm trying to get an aspx datagrid control to perform a post that results in a partial postback (asynchronous) rather than a full postback. I've added scriptmanager, an update panel, and a content template wrapper and yet it still refreshes the page when i select a data item and click add.
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="True" ></asp:ScriptManager>
<asp:UpdatePanel ID="upPnlLookup" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="True">
<ContentTemplate>
<asp:DataGrid ID="ObjectPropertiesDataGrid" CellPadding="5" CellSpacing="5" OnItemCommand="ObjectPropertiesDataGrid_ItemCommand" OnItemDataBound="ObjectPropertiesDataGrid_ItemDataBound" AutoGenerateColumns="False" CssClass="List" DataKeyField="id" runat="server">
<asp:TemplateColumn>
<ItemTemplate>
<asp:Panel ID="multiValuePanel" Visible="false" runat="server">
<table>
<tr>
<td valign="top">
<asp:Button ID="addButton" CssClass="button" CommandName="AddValue" Width="65px" Text="Add" runat="server"></asp:Button>
<asp:Button ID="addAllButton" CssClass="button" CommandName="AddAllValue" Width="85px" Text="Add All" runat="server"></asp:Button>
<br />
<asp:ListBox ID="listBoxValues" Width="250px" CssClass="listbox" SelectionMode="Multiple" runat="server"></asp:ListBox>
</td>
<td valign="top">
<asp:Button ID="removeButton" CssClass="button" Text="Remove" Width="65px" CommandName="RemoveValue" runat="server"></asp:Button>
<asp:Button ID="removeAllButton" CssClass="button" Text="Remove All" Width="85px" CommandName="RemoveAllValue" runat="server"></asp:Button>
<br />
<asp:ListBox ID="listBoxCurrentValues" Width="250px" CssClass="listbox" SelectionMode="Multiple" runat="server"></asp:ListBox>
</td>
</tr>
</table>
</asp:Panel>
</ItemTemplate>
</asp:TemplateColumn>
</asp:DataGrid>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="addButton" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="removeButton" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="addAllButton" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="removeAllButton" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
Code Behind (snippets/relevant methods):
protected void Page_Load(object sender, EventArgs e)
{
SaveButton.Click += SaveButton_Click;
btnAddChild.Click += btnAddChild_Click;
btnAddChildTop.Click += btnAddChildTop_Click;
DeleteButton.Click += DeleteButton_Click;
CancelButton.Click += CancelButton_Click;
CopyButton.Click += CopyButton_Click;
NewButton.Click += NewButton_Click;
AddSiteButton.Click += AddSiteButton_Click;
RemoveSiteButton.Click += RemoveSiteButton_Click;
ActivateAll.Click += ActivateAll_Click;
DeactivateAll.Click += DeactivateAll_Click;
startDateCalender.SelectionChanged += startDateCalender_SelectionChanged;
endDateCalender.SelectionChanged += endDateCalender_SelectionChanged;
startDateCalender.Load += startDateCalender_Load;
endDateCalender.Load += endDateCalender_Load;
CacheButton.Click += CacheButton_Click;
if (IsPostBack)
return;
if (String.IsNullOrEmpty(Request["id"]))
{
Response.Redirect("default.aspx");
}
else
{
LoadData();
}
}
private void LoadData()
{
Properties = ContentProviderFactory.GetContentProvider().GetObjectTypeProperties(CurrentContentObject.Type, false);
uploadImage.DataSource = DataHelper.GetObjecTypeImageSizes(CurrentContentObject.Type);
uploadImage.Container = CurrentContentObject;
foreach (var property in from Property p in Properties
let objectProperty = CurrentContentObject.GetProperty(p.Id)
where objectProperty == null
select p)
{
CurrentContentObject.Items.Add(property);
}
ObjectPropertiesDataGrid.DataSource = Properties;
var children = ContentProviderFactory.GetContentProvider().GetContentObjectChildren(CurrentContentObject.Id);
dgObjectChildren.DataSource = children.Where(c => c.Active);
dgObjectInactiveChildren.DataSource = children.Where(c => !c.Active);
dgObjectParents.DataSource = ContentProviderFactory.GetContentProvider().GetContentObjectParents(CurrentContentObject);
ddlContentTypes.DataSource = ContentProviderFactory.GetContentProvider().GetContentObjectTypes(CurrentContentObject.Type);
ddlContentTypesTop.DataSource = ContentProviderFactory.GetContentProvider().GetContentObjectTypes(CurrentContentObject.Type);
SitesListBox.DataSource = ContentProviderFactory.GetContentProvider().GetContentObjectSitesAvailable(CurrentContentObject.Id);
SetSitesListBox.DataSource = ContentProviderFactory.GetContentProvider().GetContentObjectSites(CurrentContentObject.Id);
if (CurrentContentObject.Id == 0)
{
Response.Status = "301 Moved Permanently";
Response.AddHeader("Location", "/admin/Contentobjects/ObjectNotFound.aspx");
Response.End();
}
const string DATE_FORMAT = "MM/dd/yyyy";
if (CurrentContentObject.StartDate.ToString(DATE_FORMAT) != SqlDateTime.MinValue.Value.ToString(DATE_FORMAT))
{
startDateTextBox.Text = CurrentContentObject.StartDate.ToShortDateString();
}
if (CurrentContentObject.EndDate.ToString(DATE_FORMAT) != SqlDateTime.MaxValue.Value.ToString(DATE_FORMAT))
{
endDateTextBox.Text = CurrentContentObject.EndDate.Date.ToShortDateString();
}
DataBind();
//if its an orphan child/child, remove 'add child' button and pulldown
if (ddlContentTypes.Items.Count == 0)
{
btnAddChild.Visible = false;
ddlContentTypes.Visible = false;
}
if (ddlContentTypesTop.Items.Count == 0)
{
ddlContentTypesTop.Visible = false;
btnAddChildTop.Visible = false;
}
// Add delete confirmation javascript
DeleteButton.Attributes["onclick"] = "return confirm_object_delete();";
RenderTypeHeader();
RenderBreadcrumb();
if (CurrentContentObject.ParentId == 0)
{
UserInfo.AddToHistory(CurrentContentObject.Id, CurrentContentObject.Name);
}
else
{
UserInfo.AddToHistory(CurrentContentObject.Parent.Id, CurrentContentObject.Parent.Name);
}
startCalenderPanel.Visible = false;
endCalenderPanel.Visible = false;
}
protected void ObjectPropertiesDataGrid_ItemCommand(object sender, DataGridCommandEventArgs e)
{
var id = (int)ObjectPropertiesDataGrid.DataKeys[e.Item.ItemIndex];
switch (e.CommandName.ToLower())
{
case "clearimage":
{
// Delete the image (does not physically remove the image but will be replaced if new a new one updates)
var imageProperty = e.Item.FindControl("imageProperty") as Image;
var tbFileName = e.Item.FindControl("tbFileName") as TextBox;
tbFileName.Text = string.Empty;
imageProperty.ImageUrl = string.Empty;
break;
}
case "addvalue":
{
// Adds a property value to the list of properites
var listBoxValues = e.Item.FindControl("listBoxValues") as ListBox;
var listBoxCurrentValues = e.Item.FindControl("listBoxCurrentValues") as ListBox;
foreach(var item in listBoxValues.Items.Cast<ListItem>().Where(item => item.Selected))
{
// Add item to the set values
listBoxCurrentValues.Items.Add(item);
}
for (var i = listBoxValues.Items.Count - 1; i >= 0; i--)
{
if (listBoxCurrentValues.Items.FindByValue(listBoxValues.Items[i].Value) != null)
{
listBoxValues.Items.RemoveAt(i);
}
}
SortListBox(listBoxCurrentValues);
break;
}
case "removevalue":
{
var listBoxValues = e.Item.FindControl("listBoxValues") as ListBox;
var listBoxCurrentValues = e.Item.FindControl("listBoxCurrentValues") as ListBox;
for(var i = listBoxCurrentValues.Items.Count - 1; i >= 0; i--)
{
if(listBoxCurrentValues.Items[i].Selected)
{
listBoxValues.Items.Add(listBoxCurrentValues.Items[i]);
listBoxCurrentValues.Items.RemoveAt(i);
}
}
SortListBox(listBoxValues);
break;
}
case "addallvalue":
{
var listBoxValues = e.Item.FindControl("listBoxValues") as ListBox;
var listBoxCurrentValues = e.Item.FindControl("listBoxCurrentValues") as ListBox;
foreach(ListItem item in listBoxValues.Items)
{
// Add item to the set values
listBoxCurrentValues.Items.Add(item);
}
for(var i = listBoxValues.Items.Count - 1; i >= 0; i--)
{
if(listBoxCurrentValues.Items.FindByValue(listBoxValues.Items[i].Value) != null)
{
listBoxValues.Items.RemoveAt(i);
}
}
SortListBox(listBoxCurrentValues);
break;
}
case "removeallvalue":
{
var listBoxValues = e.Item.FindControl("listBoxValues") as ListBox;
var listBoxCurrentValues = e.Item.FindControl("listBoxCurrentValues") as ListBox;
for (var i = listBoxCurrentValues.Items.Count - 1; i >= 0; i--)
{
listBoxValues.Items.Add(listBoxCurrentValues.Items[i]);
listBoxCurrentValues.Items.RemoveAt(i);
}
SortListBox(listBoxValues);
break;
}
case "addalldatalistvalue":
{
var dataListValues = e.Item.FindControl("DataListValues") as DataList;
var dataListCurrentValues = e.Item.FindControl("CurrentDataListValues") as DataList;
foreach (DataListItem item in dataListValues.Items)
{
ImageLink imageLink = ImageLinks[id][item.ItemIndex];
CurrentImageLinks[id].Add(imageLink);
}
for (var i = dataListValues.Items.Count - 1; i >= 0; i--)
{
if (CurrentImageLinks[id].Contains(ImageLinks[id][i]))
{
ImageLinks[id].RemoveAt(i);
}
}
dataListValues.DataSource = ImageLinks[id];
dataListCurrentValues.DataSource = CurrentImageLinks[id];
dataListValues.DataBind();
dataListCurrentValues.DataBind();
break;
}
case "removealldatalistvalue":
{
var dataListValues = e.Item.FindControl("DataListValues") as DataList;
var dataListCurrentValues = e.Item.FindControl("CurrentDataListValues") as DataList;
for (var i = dataListCurrentValues.Items.Count - 1; i >= 0; i--)
{
ImageLinks[id].Add(CurrentImageLinks[id][i]);
CurrentImageLinks[id].RemoveAt(i);
}
dataListValues.DataSource = ImageLinks[id];
dataListCurrentValues.DataSource = CurrentImageLinks[id];
dataListValues.DataBind();
dataListCurrentValues.DataBind();
break;
}
}
}
解决方案
also try this :
Control me = FindControl(Request.Params.Get("__EVENTTARGET"));
if(FindControl(me!=addButton && me!=removeButton && me!=addAllButton && me!=removeAllButton)
{
if (IsPostBack)
return;
if (String.IsNullOrEmpty(Request["id"]))
{
Response.Redirect("default.aspx");
}
else
{
LoadData();
}
}