#c# #asp.net #ajax #updatepanel #scriptmanager
#c# #asp.net #ajax #updatepanel #scriptmanager
Вопрос:
У меня есть страница .Master с
<asp:ScriptManager ID="ScriptManager" runat="server" />
<asp:UpdatePanel runat="server" id="UpdatePanel" updatemode="Conditional">
<ContentTemplate>
<asp:ContentPlaceHolder ID="MasterIndhold_Member" runat="server">
</asp:ContentPlaceHolder>
И внутри ContentPlaceHolder я получил панель с загрузкой файлов. Дело в том, что FileUpload не находит файл. Здесь я хочу добавить RegisterAsyncPostBackControl в Scriptmanager, но как мне это сделать, когда панель находится на другой странице?
Код вложенной страницы выглядит так
<asp:Content ID="Content3" ContentPlaceHolderID="MasterIndhold_Member" runat="server">
<asp:panel runat="server" ID="Panel_MyProfile_Member" Visible="false">
<asp:FileUpload ID="File1" runat="server" />
<asp:LinkButton ID="LinkUploadImageMember" runat="server" onclick="LinkUploadImageMember_Click">Upload</asp:LinkButton>
И кодовая ссылка для загрузки файлов выглядит следующим образом
protected void LinkUploadImageMember_Click(object sender, EventArgs e)
{
if (File1.HasFile == true)
{
if ((File1.PostedFile.FileName.EndsWith(".jpg")) || (File1.PostedFile.FileName.EndsWith(".jpeg")) || (File1.PostedFile.FileName.EndsWith(".png")))
{
byte[] input = File1.FileBytes;
Bruger.UploadImage(input, int.Parse(Request.QueryString["ID"]));
}
}
}
Пожалуйста, сохраните примеры кода для C # и ASP.NET поскольку я новичок в этом деле ^^
Спасибо
Комментарии:
1. Ну, я нашел это решение ScriptManager ScriptManager = ScriptManager. GetCurrent(this.Page); scriptmanager . RegisterAsyncPostBackControl(); Но дело в том, что я точно не знаю, что заполнять в RegisterAsyncPostBackControl
2. Видимый флаг панели будет установлен в true, я полагаю? Что вы имеете в виду, говоря «загрузка файла не находит файл»? Насколько велик файл, который вы загружаете?
3. Да, для панели установлено значение visible = true, к моменту перехода кода к части загрузки. Всякий раз, когда я загружаю файл (8,70 КБ), Файл1. HasFile = false
Ответ №1:
Вы также можете использовать класс ScriptManagerProxy, если вам нужен ScriptManager на вашей странице содержимого, но я не уверен, нужно ли вам это вообще. Вам действительно нужна панель обновления на каждой странице содержимого? (потому что вы объявили это на главной странице). Я думаю, было бы лучше объявить UpdatePanel на странице содержимого.
Попробуйте определить триггер для вашей кнопки linkbutton, иначе значение HasFiles всегда равно false
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:PostBackTrigger ControlID="LinkUploadImageMember" />
</Triggers>
<ContentTemplate>
<asp:FileUpload ID="File1" runat="server" />
<asp:LinkButton ID="LinkUploadImageMember" runat="server" Text=" upload " />
</ContentTemplate>
</asp:UpdatePanel>
Если вы не можете удалить UpdatePanel с главной страницы, вы можете предоставить свойство на главной странице, которое предоставляет доступ к updatepanel, например:
public UpdatePanel MyUpdatePanel
{
get { return UpdatePanel1; }
}
С contentpage вы можете получить доступ к панели обновления и обновить триггеры программно:
protected void Page_Load(object sender, EventArgs e)
{
((Site)Master).MyUpdatePanel.Triggers.Add(new PostBackTrigger() {
ControlID = LinkUploadImageMember.UniqueID });
}
Комментарии:
1. Причина обновления панелей на каждой странице заключается в том, что страница выглядит по-разному для некоторых пользователей ^^
2. Тег <Trigger> недопустим в теге <Panel>, не могли бы вы предложить мне поместить триггер в <UpdatePanel> на странице .master и установить <Trigger> ControlID = кнопка загрузки на вложенной странице?
3. Я не уверен, сработает ли это, по крайней мере, в моем тестовом проекте. Я лично считаю, что лучше поместить UpdatePanel на страницу содержимого. Область обновления в любом случае должна быть как можно меньше.
4. Я вижу. Любым способом вы сможете исправить это в текущем состоянии, потому что прямо сейчас невозможно уменьшить размер <UpdatePanel> .
5. В верхней части вашей главной страницы вы найдете тег @Master . Существует атрибут, называемый Inherits, который определяет класс. Или вы найдете это в коде за файлом. Я бы посоветовал вам прочитать хорошую asp.net бронируйте, прежде чем идти дальше, иначе у вас будет много открытых вопросов 😉