Scriptmanager на одной странице, но панель на другой

#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 бронируйте, прежде чем идти дальше, иначе у вас будет много открытых вопросов 😉