ajaxcontroltoolkit установка скрытого значения после завершения asyncfileupload - PullRequest
1 голос
/ 29 июня 2010

У меня есть элемент управления 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 в ответ. Запишите вызов метода, который я установил для обработки загруженного файла.Ничто из того, что я сделал, до сих пор не сработало.После того, как я все сделал, скрытое поле все еще не содержит требуемого значения.

Ответы [ 3 ]

3 голосов
/ 13 августа 2011

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

так скажем, наш контрольный html подобен этому

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

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

Привет

0 голосов
/ 22 января 2014

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

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

0 голосов
/ 28 января 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".

...