У меня есть скрытый элемент управления во вложенном gridview, чтобы определить, расширена или нет. Я устанавливаю значение в функции javascript. Он устанавливается правильно из-за предупреждений, которые я установил. В методе RowDataBound я хочу прочитать Скрытый элемент управления, чтобы определить, следует ли мне расширять сетку или нет. Когда я читаю значение в методе RowDataBound, он всегда равен «0». Моя разметка огромен, так что это только вложенная сетка, UpdatePanel и hiddencontrol ассоциации:Неверное значение скрытого контроля при чтении в коде за
<asp:UpdatePanel ID="updatePnlNestedGrid" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<div id="div<%# Eval("GroupID") %>" style="display:none">
<asp:GridView ID="GroupMemberGridView" runat="server" AutoGenerateColumns="false" OnRowDeleting="GroupMemberGridView_RowDeleting"
OnRowCommand="GroupMemberGridView_RowCommand" CssClass="grid" ShowFooter="true" AllowPaging="true" PageSize="5"
onpageindexchanging="GroupMemberGridView_PageIndexChanging" onpageindexchanged="GroupMemberGridView_PageIndexChanged">
<Columns>
<asp:TemplateField HeaderText="MemberID">
<ItemTemplate>
<asp:Label ID="mggvLblMemberID" runat="server" Text='<%# Bind("MemberID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Member Name" ItemStyle-Wrap="false">
<ItemTemplate>
<asp:Label ID="mggvLblMemberName" runat="server" Text='<%# Bind("MemberName") %>'></asp:Label>
</ItemTemplate>
<FooterTemplate>
<asp:DropDownList ID="mggvDDLMemberName" runat="server"
class="chosen-single" data-placeholder="Choose member…">
</asp:DropDownList>
<asp:RequiredFieldValidator ID="ReqValueDDLMemberInsert" runat="server" InitialValue="0"
ControlToValidate="mggvDDLMemberName"
ErrorMessage="Selection required." CssClass="message-error-dropdown">
</asp:RequiredFieldValidator>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Active Device(s)">
<ItemTemplate>
<asp:Label ID="mggvLblActiveDevice" runat="server" Text='<%# (Boolean.Parse(Eval("ActiveDevice").ToString())) ? "Yes" : "No" %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Action" ItemStyle-Wrap="false" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:Button ID="mggvDeleteButton" runat="server" CausesValidation="False" CommandName="Delete"
Text="Delete" CssClass="gridActionbutton" OnClientClick="return confirm('Are you sure you want to delete this Group Member?')" >
</asp:Button>
</ItemTemplate>
<FooterTemplate>
<asp:Button ID="mggvAddButton" runat="server" CommandName="Add" Text="Add Member" Width="90%"
CssClass="gridActionbutton"/>
</FooterTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
</ContentTemplate>
</asp:UpdatePanel>
<asp:HiddenField ID="mggvIsExpanded" runat="server" ClientIDMode="Static" Value="0" />
Это Java-функция, расширяющая/сворачивает сетки и устанавливает скрытое значение:
function DivExpandCollapse(groupID) {
var div = document.getElementById(groupID);
var img = document.getElementById('img' + groupID);
//alert shows correct hidden value
alert($(div).parent().siblings("input:hidden[id$='mggvIsExpanded']").val());
if (div.style.display == "none") {
div.style.display = "inline";
img.src = "Images/minus.png";
$(div).parent().siblings("input:hidden[id$='mggvIsExpanded']").val("1");
$("#" + div.getAttribute('id') + ".chosen-single").chosen("destroy");
$("#" + div.getAttribute('id') + ".chosen-single").chosen({
search_contains: true,
width: "100%",
placeholder_text_single: "Choose member…",
no_results_text: "Sorry, no match!"
});
}
else {
div.style.display = "none";
img.src = "Images/plus.png";
$(div).parent().siblings("input:hidden[id$='mggvIsExpanded']").val("0");
}
}
Этот это событие, связанное с кодом. Я показываю только скрытый код значения .:
protected void UserGroupGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
int tiGroupID = Convert.ToInt32(UserGroupGridView.DataKeys[e.Row.RowIndex].Value.ToString());
GridView tgvGroupMember = (GridView)e.Row.FindControl("GroupMemberGridView");
HiddenField hiddenExpand = (HiddenField)tgvGroupMember.Parent.FindControl("mggvIsExpanded");
//This value is always "0" - the initial value
String hiddenValue = hiddenExpand.Value.ToString();
}
}
Даже если скрытое значение задано в javascript. Значение всегда равно нулю в коде, за которым стоит начальное значение.
Почему скрытое значение никогда не отображается как «1» в событии RowDataBound при расширении сетки?
UPDATE я поставил жерех: скрытый внутри ContentTemplate, который находится внутри UpdatePanel. Но он все еще не читает скрытое значение правильно.
Ваш 'HiddenField' не находится внутри' gridview' – renakre
Скрытое поле должно быть внутри gridview? Все примеры имеют это как родной брат UpdatePanel. –
, почему вам нужно 'FindControl()', почему не просто 'mggvIsExpanded.Value', это серверный ... – renakre