繁体   English   中英

javascript函数找不到元素

[英]javascript function can't find the element

我需要从后面的代码中调用一些文件上传器JavaScript。 JavaScript基本上是自定义文件上传器控件的样式。 但是,JavaScript函数找不到该元素。 我从检查员那里得到了这个:

*o = {element: null, 
      action: "/Web/UploadHandler.axd?UploadID=55f3930c-6aa9-4201…ccfdfae6c6&ObjectID=145649&RelationshipTypeID=223", 
      sizeLimit: 209715

什么时候应该看起来像这样:

o = {element: div#uploadContent, action: "/Web/UploadHandler.axd?UploadID=c1829b40-7869-4f19…411e7a542c&ObjectID=151808&RelationshipTypeID=223", sizeLimit: 20971520, acceptTypes: "image/*", onSubmit: ƒ, …}
qq.extend

这是代码:

 div = new HtmlGenericControl("div") { ID = ("dlWrapper") };

 Literal litScript = new Literal();
 litScript.Mode = LiteralMode.PassThrough;
 div.Controls.Add(litScript);

 var imageUploader = (ImageUpload)CreateImageUploader(ActiveObject, p, litScript);
 div.Controls.Add(imageUploader);
 controls.Add(div);

 private static Control CreateImageUploader(ObjectInstance objectInstance, PropertyType propertyType, Literal litScript)
 {
     ImageUpload imageUpload = new ImageUpload (objectInstance, litScript) { ID = ControlFactory.GetControlId(ControlFactory.IMAGE_PREFIX, ControlFactory.PROPERTY_TYPE_PREFIX, objectInstance.Id, propertyType.Id), Width = Unit.Pixel(80), Height = Unit.Pixel(30) };
     PropertyInstanceValue piv = objectInstance.GetPropertyInstanceValue(propertyType.Id);           
     return imageUpload;
 }

 public class ImageUpload : FileUpload
 {
    public ObjectInstance ActiveObject {get; set; }
    public Literal litScript { get; set; }
    private string uploadID;
    private string accept = "image/*";
    public string UploadID
    {
        get
        {
            if (string.IsNullOrEmpty(uploadID))
            {
                uploadID = GetUploadID();
            }
            return uploadID;
        }
        set { uploadID = value; }
    }

    public ImageUpload(ObjectInstance activeObject, Literal literal)
    {
        ActiveObject = activeObject;
        litScript = literal;
    }

    public string GetUploadID()
    {
        string uploadID;
        if (HttpContext.Current.Session[EDM.Common.Definitions.SessionKey.UPLOAD_ID] != null)
        {
            uploadID = (string)HttpContext.Current.Session[EDM.Common.Definitions.SessionKey.UPLOAD_ID];
            HttpContext.Current.Cache.Remove("cacheFlashSessionID_" + uploadID);
            HttpContext.Current.Cache.Remove("cacheFlashAuth_" + uploadID);
        }
        uploadID = Guid.NewGuid().ToString();
        HttpContext.Current.Session[EDM.Common.Definitions.SessionKey.UPLOAD_ID] = uploadID;
        HttpContext.Current.Cache.Insert("cacheFlashSessionID_" + uploadID, HttpContext.Current.Session.SessionID, null, DateTime.Now.AddMinutes(20), Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, null);
        if (HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName] != null)
        {
            // ReSharper disable PossibleNullReferenceException
            HttpContext.Current.Cache.Insert("cacheFlashAuth_" + uploadID, HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName].Value, null, DateTime.Now.AddMinutes(20), Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, null);
            // ReSharper restore PossibleNullReferenceException
        }
        return uploadID;
    }

    protected override void OnLoad(EventArgs e)
    {
        Literal litScript = new Literal();
        ScriptManager scriptManager = ScriptManager.GetCurrent(Page);

        StringBuilder sb = new StringBuilder();
        sb.Append("<div id=\"uploadContent\"></div>");
        litScript.Text = sb.ToString();
        sb.Remove(0, sb.Length);
        sb.Append("<script type=\"text/javascript\">");
        int maxBytes = ProcessUnity.Common.Utility.GetMaxRequestLength() * 1024;
        sb.Append("var uploader = new qq.FileUploader({ element: document.getElementById('uploadContent'), action: '" + Context.Request.ApplicationPath + "/UploadHandler.axd?UploadID=" + UploadID + "&ObjectID=" + ActiveObject.Id + "&RelationshipTypeID=" + EDM.Common.Definitions.RelationshipTypeId.IMAGE_FILE + "', sizeLimit: " + maxBytes + ", acceptTypes:'" + accept + "', onSubmit: uploadStart, onComplete: uploadComplete, onError: uploadError, multiple: false });");
        sb.Append("</script>");

        if (scriptManager != null)
        {
            ScriptManager.RegisterClientScriptBlock(this, typeof(ImageUpload), Guid.NewGuid().ToString(), sb.ToString(), false);
        }
        else
        {
            Page.ClientScript.RegisterClientScriptBlock(typeof(Page), Guid.NewGuid().ToString(), sb.ToString());
        }
        base.OnLoad(e);
    }     

    private object GetScriptManager()
    {
        foreach (DictionaryEntry entry in Page.Items)
        {
            if (entry.Key.ToString().IndexOf("System.Web.UI.ScriptManager") >= 0)
            {
                return entry.Value;
            }
        }
        return null;
    }
}

看起来您在这里期待的是litScript

Literal litScript = new Literal();
litScript.Mode = LiteralMode.PassThrough;
div.Controls.Add(litScript);

要通过OnLoad事件进行修改:

protected override void OnLoad(EventArgs e)
{
    Literal litScript = new Literal();
    // ...
    StringBuilder sb = new StringBuilder();
    sb.Append("<div id=\"uploadContent\"></div>");
    litScript.Text = sb.ToString();
    // ...
    base.OnLoad(e);
}

但是您的OnLoad正在构造自己的本地 Literal 仅仅因为它与外部Literal具有相同的litScript名称,并不意味着两者是相关的。 简而言之,没有任何内容将该div写入页面。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM