【问题标题】:javascript function can't find the elementjavascript函数找不到元素
【发布时间】:2018-07-04 17:36:54
【问题描述】:

我需要从后面的代码中调用一些文件上传器 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;
    }
}

【问题讨论】:

    标签: javascript c# asp.net webforms


    【解决方案1】:

    看起来你在这里期待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 写入页面。

    【讨论】:

    • 我从 OnLoad 中删除了 Literal 声明,但仍然找不到元素。
    • 元素真的存在吗?
    • 不,“uploadContent”甚至不存在。
    • ImageFile
    • 我建议您提出一个新问题,您可以在其中询问如何像您尝试的那样注入自定义内容。问题不在于 JavaScript 找不到元素(因为它找不到不存在的元素)。
    猜你喜欢
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 2023-02-24
    • 2014-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    相关资源
    最近更新 更多