Je reçois l'erreur "Référence d'objet non définie sur une instance d'un objet." lorsque vous essayez de référencer un HiddenField (lvEditProjectSteps_hdnStepStatusId pour référence future) à partir de l'EditItem lors de l'événement OnItemUpdating après que l'événement Update se déclenche dans un ListView. Cela se produit uniquement sur l'élément FIRST dans le ListView. J'ai vérifié la source et le HTML est rendu correctement.Pourquoi j'obtiens une erreur de référence d'objet null lors de l'enregistrement (événement OnItemUpdating) du premier élément d'édition dans un ListView?
TOUT aperçu est apprécié! Merci à l'avance ...
error Source:
var lvEditProjectSteps_hdnStepStatusId = (HiddenField) lvEditProjectSteps.EditItem.FindControl("lvEditProjectSteps_hdnStepStatusId");
est ici le côté ASPX de ListView:
<asp:ListView ID="lvEditProjectSteps" runat="server"
OnItemDataBound="lvEditProjectSteps_OnItemDataBound"
OnItemUpdating="lvEditProjectSteps_OnItemUpdating"
DataSourceID="odsEditProjectStep"
DataKeyNames="Id">
<LayoutTemplate>
<table class="standard-box-style" style="width:800px">
<thead>
<tr>
<th> </th>
<th> </th>
<th>Created</th>
<th>Updated</th>
</tr>
</thead>
<tbody>
<asp:PlaceHolder ID="itemPlaceHolder" runat="server" />
</tbody>
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td style="width:50px"<%# (Container.DisplayIndex % 2 == 0)?"":" class=\"row-alternating\"" %>>
<asp:ImageButton ID="lvEditProjectSteps_btnEdit" runat="server"
ImageUrl="~/admin/images/icons/edit.gif"
AlternateText="Edit"
SkinID="interfaceButton"
CommandName="Edit" />
<asp:HiddenField ID="lvEditProjectSteps_hdnId" runat="server" Value='<%# Bind("Id")%>' />
<asp:HiddenField ID="lvEditProjectSteps_hdnStepStatusId" runat="server" Value='<%# Bind("StepStatusId")%>' />
<asp:HiddenField ID="lvEditProjectSteps_hdnStepStatusStepId" runat="server" Value='<%# Bind("StepStatus_StepId")%>' />
</td>
<td style="width:30px"<%# (Container.DisplayIndex % 2 == 0)?"":" class=\"row-alternating\"" %>><asp:Image ID="imgStatus" runat="server" /></td>
<td style="width:75px"<%# (Container.DisplayIndex % 2 == 0)?"":" class=\"row-alternating\"" %>><asp:Literal ID="litTsCreated" runat="server" /></td>
<td style="width:75px"<%# (Container.DisplayIndex % 2 == 0)?"":" class=\"row-alternating\"" %>><asp:Literal ID="litTsUpdated" runat="server" /></td>
</tr>
</ItemTemplate>
<EditItemTemplate>
<tr>
<td style="width:50px"<%# (Container.DisplayIndex % 2 == 0)?"":" class=\"row-alternating\"" %>>
<asp:ImageButton ID="lvEditProjectSteps_btnUpdate" runat="server"
ImageUrl="~/admin/images/icons/save.png"
AlternateText="Save"
SkinID="interfaceButton"
CommandName="Update"
ValidationGroup="EditProjectStepsSave" />
<asp:ImageButton ID="lvEditProjectSteps_btnCancel" runat="server"
ImageUrl="~/admin/images/icons/cancel.png"
AlternateText="Cancel"
SkinID="interfaceButton"
CommandName="Cancel" />
<asp:HiddenField ID="lvEditProjectSteps_hdnId" runat="server" Value='<%# Bind("Id")%>' />
<asp:HiddenField ID="lvEditProjectSteps_hdnStepStatusId" runat="server" Value='<%# Bind("StepStatusId")%>' />
<asp:HiddenField ID="lvEditProjectSteps_hdnStepStatusStepId" runat="server" Value='<%# Bind("StepStatus_StepId")%>' />
</td>
<td style="width:180px" colspan="3"<%# (Container.DisplayIndex % 2 == 0)?"":" class=\"row-alternating\"" %>>
<div><strong>Status</strong></div>
<div class="radiobuttonlist-status">
<asp:RadioButtonList ID="lvEditProjectSteps_rblStatus" runat="server"
RepeatDirection="Horizontal"
AutoPostBack="true"
OnSelectedIndexChanged="lvEditProjectSteps_rblStatus_OnSelectedIndexChanged">
<asp:ListItem Value="1"><img src="/images/icon/project-status/1.png" alt="Error" /></asp:ListItem>
<asp:ListItem Value="2"><img src="/images/icon/project-status/2.png" alt="In Progress" /></asp:ListItem>
<asp:ListItem Value="3"><img src="/images/icon/project-status/3.png" alt="Complete" /></asp:ListItem>
</asp:RadioButtonList>
<asp:RequiredFieldValidator ID="valRequired_lvEditProjectSteps_rblStatus" runat="server"
ControlToValidate="lvEditProjectSteps_rblStatus"
SetFocusOnError="true"
Display="Dynamic"
ErrorMessage="<br />^ required ^"
ValidationGroup="EditProjectStepsSave" />
</div>
</td>
</tr>
</EditItemTemplate>
</asp:ListView>
Et le code-behind:
protected void lvEditProjectSteps_OnItemDataBound(object sender, ListViewItemEventArgs e)
{
if (e.Item.ItemType == ListViewItemType.DataItem)
{
var info = (ProjectStepInfo)DataBinder.GetDataItem(e.Item);
// View Item
var litTsCreated = (Literal)e.Item.FindControl("litTsCreated");
var litTsUpdated = (Literal)e.Item.FindControl("litTsUpdated");
var imgStatus = (Image) e.Item.FindControl("imgStatus");
if (litTsCreated != null) litTsCreated.Text = String.Format("{0:d}", info.TsCreated);
if (litTsUpdated != null) litTsUpdated.Text = String.Format("{0:d}", info.TsCreated);
if (imgStatus != null) imgStatus.ImageUrl = String.Format("/images/icon/project-status/{0}.png", info.StepStatus_StatusId);
// Edit Item
var lvEditProjectSteps_rblStatus = (RadioButtonList) e.Item.FindControl("lvEditProjectSteps_rblStatus");
if (lvEditProjectSteps_rblStatus != null) lvEditProjectSteps_rblStatus.SelectedValue = info.StepStatus_StatusId.ToString();
}
}
protected void lvEditProjectSteps_OnItemUpdating(object sender, ListViewUpdateEventArgs e)
{
if (IsValid)
{
var oController = new Controller();
var lvEditProjectSteps_hdnStepStatusId = (HiddenField) lvEditProjectSteps.EditItem.FindControl("lvEditProjectSteps_hdnStepStatusId");
var lvEditProjectSteps_hdnStepStatusStepId = (HiddenField) lvEditProjectSteps.EditItem.FindControl("lvEditProjectSteps_hdnStepStatusStepId");
var lvEditProjectSteps_rblStatus = (RadioButtonList) lvEditProjectSteps.EditItem.FindControl("lvEditProjectSteps_rblStatus");
var infoStepStatus = oController.StepStatus_SelectOne_StepId_StatusId(Convert.ToInt32(lvEditProjectSteps_hdnStepStatusStepId.Value), Convert.ToInt32(lvEditProjectSteps_rblStatus.SelectedValue));
if (lvEditProjectSteps_hdnStepStatusId != null)
{
e.NewValues["ProjectId"] = Convert.ToInt32(lvEditProjectSteps_hdnProjectId.Value);
e.NewValues["StepStatusId"] = infoStepStatus.Id;
}
else
{
Response.Write("cancel");
e.Cancel = true;
}
}
else
{
Response.Write("cancel, not valid");
e.Cancel = true;
}
}
protected void lvEditProjectSteps_rblStatus_OnSelectedIndexChanged(object sender, EventArgs e)
{
var oController = new Controller();
var rbl = (RadioButtonList)sender;
var lvEditProjectSteps_txtText = (TextBox) rbl.NamingContainer.FindControl("lvEditProjectSteps_txtText");
var lvEditProjectSteps_txtComment = (TextBox)rbl.NamingContainer.FindControl("lvEditProjectSteps_txtComment");
var lvEditProjectSteps_hdnStepStatusStepId = (HiddenField) rbl.NamingContainer.FindControl("lvEditProjectSteps_hdnStepStatusStepId");
if (!String.IsNullOrEmpty(lvEditProjectSteps_hdnStepStatusStepId.Value) && lvEditProjectSteps_txtText != null && lvEditProjectSteps_txtComment != null)
{
var infoStep = oController.Step_SelectOne(Convert.ToInt32(lvEditProjectSteps_hdnStepStatusStepId.Value));
var infoStepStatus = oController.StepStatus_SelectOne_StepId_StatusId(Convert.ToInt32(lvEditProjectSteps_hdnStepStatusStepId.Value), Convert.ToInt32(rbl.SelectedValue));
lvEditProjectSteps_txtText.Text = infoStep.Name;
lvEditProjectSteps_txtComment.Text = infoStepStatus.Text;
}
}