ajaxcontroltoolkit устанавливает скрытое значение после завершения asyncfileupload

У меня есть элемент управления asyncfileupload, который я использую из ajaxcontroltoolkit. В файле, завершенном в коде, я обрабатываю файл и записываю информацию в файле в базу данных. Я получаю идентификатор записи из базы данных, и это нужно записать в скрытое поле asp. Я попытался просто установить значение:

fldImageID.Value = pimg.IdImageGroup.ToString();

Я попытался зарегистрировать скрипт, как я видел в пример на сайте:

  ScriptManager.RegisterClientScriptBlock(
         ImageFileUploader, 
         ImageFileUploader.GetType(), 
         "script1",
       "alert('hi'); top.document.getElementById('" 
       + fldImageID.ClientID 
         + "').value='" 
       + pimg.IdImageGroup.ToString() 
       + "'; top.document.getElementById('" 
     + lblError.ClientID 
        + "').innerHTML = 'image uploaded'",
   true);

Я только что попытался внедрить javascript в вызов response.Write из метода, который я установил для обработки загруженного файла. Ничто из того, что я сделал, пока не сработало. После того, как я все сделал, скрытое поле все еще не содержит требуемого значения.


person stephenbayer    schedule 29.06.2010    source источник


Ответы (3)


Это довольно просто с jQuery. Разместите на своей странице скрытый элемент управления вводом html, не элемент управления вводом asp:hidden. Добавьте класс, скажем, "hiddenPhoto" в ваш скрытый элемент управления html.

Итак, скажем, наш управляющий html такой

<input type="hidden" class="hiddenPhoto" runat="server" id="hdPhotoName" />

Теперь получите к нему доступ с помощью селектора классов в вашем методе OnClientUploadComplete js и установите его значение. Объявите его как runat="server", чтобы получить доступ к его значению на стороне сервера.

С Уважением

person Asad    schedule 13.08.2011

Я нашел приемлемое решение, когда работал над этим. И с тех пор я получил электронные письма от людей, у которых была такая же проблема, и они спрашивали, нашел ли я решение. Итак, я представляю его здесь, удаляя весь посторонний код:

Из пользовательского элемента управления, который имеет элемент управления FileUpload, я сначала устанавливаю переменную сеанса на задней стороне обработчика FileUploadComplete:

*в файле ascx (upload_chart.ascx) у меня есть AsyncFileUpload, важны OnUploadComplete и OnClientUploadComplete:*

<ajaxToolkit:AsyncFileUpload 
         OnUploadedComplete="FileUploadComplete1" 
         OnClientUploadComplete="UploadComplete1" 
         ID="ImageFileUploader" 
         runat="server" />

*в коде файла ascx (upload_chart.ascx.cs) я обрабатываю FileUploadComplete:*

public void FileUploadComplete1(object sender, EventArgs e)
{

    try
    {
        if (ImageFileUploader.FileBytes.Length > 0)
            {

                // File data is in ImageFileUploaded.FileBytes
                    // Save it however you need to
                // I saved it to a database, in a DBImage Object class I created
                    // DBImage is specific to my application
                    ODS.Entity.DBImage pimg = 
                        ODS.Data.DataRepository.SaveImageBytes(ImageFileUploaded.FileBytes);
                    // Set the ImageID1 in the session
                Session["ImageID1"] = pimg.IdImageGroup.ToString();
            }
            else
            {
                //  error handling for an empty file, however you want to handle it

            }
    }
    catch (Exception Ex)
    {
        //  error handling for an unhandled exception, whatever you want to do here

    }
}

Методы JavaScript и скрипта используются для установки значения на странице, вот мой программный код для метода скрипта:

 // on the aspx page code behind (chartofthedayadmin.aspx.cs) I have the webmethod:

   [System.Web.Services.WebMethod]
    public static string GetImageID1()
    {
        System.Web.SessionState.HttpSessionState Session = System.Web.HttpContext.Current.Session;
        String retval = Session["ImageID1"].ToString();
        Session["ImageID1"] = null;
        return retval;
    }

Вот код javascript: // во внешнем интерфейсе aspx (chartofthedayadmin.aspx) у меня есть javascript // для вызова веб-метода и сообщение об ошибке javascript:

function UploadComplete1() {
         var str = PageMethods.GetImageID1(uploadSuccess1, uploadFailed);
     }
    function uploadFailed() {

        alert('error occurred or some meaningfull error stuff');
   }

*// javascript в пользовательском элементе управления (upload_chart.ascx) для установки значения скрытого поля*

 function uploadSuccess1(result) {

    document.getElementById('<%= fldImageID.ClientID %>').value = result;

}

Примечание: убедитесь, что ваш диспетчер сценариев имеет EnablePageMethods="true".

person stephenbayer    schedule 27.01.2011

Лучшее и более простое решение находится в коде:

string script = String.Format("top.document.getElementById('hdnFilename').value='{0}';", safeFilename);
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "hdnFilenameFromCodeBehind", script, true);

В моем случае safeFilename — это уникальное имя файла после обработки повторяющегося имени файла, т. е. sample_5.png в 5-й загрузке sample.png.

См. http://forums.asp.net/t/1503989.aspx.

person Tillito    schedule 22.01.2014
comment
Аналогичным образом вы можете вызвать функцию javascript. - person Tillito; 22.01.2014