У меня есть представление Details View, в котором есть поле загрузки файла. Когда я заполняю информацию и загружаю файл (я пробовал несколько файлов размером от 9k до 6.8MB), вся информация (текстовые поля) отображается нормально, но загруженный файл всегда возвращает false при проверке HasFile и всегда возвращает String.Empty при проверке имени файла.
Я делаю что-то не так? Представление деталей находится в панели и не в панели обновления
<asp:Panel ID="pnlUpdate" runat="server"
Visible="false">
<h4 runat="server" id="h2SubCaption">Person Details</h4>
<asp:DetailsView ID="dvAssignment"
runat="server"
AutoGenerateRows="false"
Width="100%"
SkinID="SampleDetailsView"
CssSelectorClass="PrettyDetailsView"
DataKeyNames="guidMemberId"
DefaultMode="Edit"
OnItemUpdating="dvAssignment_ItemUpdating"
OnModeChanging="dvAssignment_ModeChanging"
AutoGenerateEditButton="True" >
<Fields>
<asp:TemplateField HeaderText="Nomination Letter">
<EditItemTemplate>
<asp:FileUpload runat="server" ID="fileuploadNomination" />
</EditItemTemplate>
</asp:TemplateField> .....
Код позади:
FileUpload _nomination = (FileUpload)dv.FindControl("fileuploadNomination");
byte[] nominationByte = null;
if (_nomination.FileName != string.Empty)
nominationByte = _nomination.FileBytes;
//if(_nomination.HasFile)
//nominationByte = _nomination.FileBytes;
EDIT Я добавил вызов Page_Load, и похоже, что страница возвращается назад, когда я нажимаю на автоматически сгенерированную кнопку обновления для DetailsView. Этот возврат, вероятно, очищает мое поле FileUpload. Есть идеи, как это обойти?
Edit #2 Теперь я поместил панель обновления вокруг DetailsView и установил постбэк триггер DetailsView (см. ниже), и это все еще не работает, похоже, что это очищает элемент управления upload перед отправкой.
<asp:UpdatePanel ID="updatePnl" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Panel ID="pnlUpdate" runat="server"
Visible="false">
<h4 runat="server" id="h2SubCaption">Person Details</h4>
<asp:DetailsView ID="dvAssignment"
runat="server"
AutoGenerateRows="false"
Width="100%"
SkinID="SampleDetailsView"
CssSelectorClass="PrettyDetailsView"
DataKeyNames="guidMemberId"
DefaultMode="Edit"
OnItemUpdating="dvAssignment_ItemUpdating"
OnModeChanging="dvAssignment_ModeChanging"
AutoGenerateEditButton="True" >
<FieldHeaderStyle Font-Bold="True" Width="150px" />
<Fields>
<asp:FileUpload runat="server" ID="fileuploadNomination" />
</EditItemTemplate>
</asp:TemplateField>
</Fields>
</asp:DetailsView >
</asp:Panel>
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="dvAssignment" />
</Triggers>
</asp:UpdatePanel>
Код Gridview в соответствии с запросом
<asp:GridView ID="gvQuality"
runat="server"
AutoGenerateColumns="False"
Width="100%"
DataKeyNames="guidMemberId"
CssSelectorClass="PrettyGridView"
SkinID="SampleGridView"
OnSelectedIndexChanged="gvQuality_SelectedIndexChanged"
onrowdatabound="gvQuality_RowDataBound">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="btnViewDetails" runat="server" Text="Edit" CommandName="Select" />
</ItemTemplate>
</asp:TemplateField>
несколько связанных полей находятся после этого (имя, фамилия и т.д.)
protected void gvQuality_SelectedIndexChanged(object sender, EventArgs e)
{
Guid guidMemberId = (Guid)gvQuality.SelectedDataKey.Values["guidMemberId"];
PortalDataContext db = new PortalDataContext(AuthenticatedUser.ConnectionString);
h2SubCaption.InnerText = "Update Person";
dvAssignment.ChangeMode(DetailsViewMode.Edit);
dvAssignment.DataSource = LINQ Query Here
dvAssignment.DataBind();
}