具体的情况是这样的,我做的是一个网络文件夹功能的网页,可以通过点击列表中的图片名称所在行(就是点击那个前面的代表图片的标示),然后在一个DIV层里面显示这个图片。做出来之后总是显示缺少对象,望诸位给与帮助。
public void showdir(string path)
    { 
        //获取所有文件夹
        DirectoryInfo di = new DirectoryInfo(path);
        DirectoryInfo[] d = di.GetDirectories();
        string html = "";
        html = "<table style='width=400;height=200'><tr><td>文件类型</td><td>文件名称</td><td>最后访问时间</td></tr>";
        foreach (DirectoryInfo dd in d)
        {
            html += "<tr><td><img src='image/dir.jpg'></td><td>" + dd.Name + "</td><td>" + dd.LastAccessTime.ToShortDateString() + "<input type='Button' Height='28px' Width='100px'  id=" + dd.Name + "' value='打开' onclick='' /></td></tr>";
        }        //获取所有文件
        FileInfo[] files = di.GetFiles();
        foreach (FileInfo fi in files)
        {
            string exename = fi.Extension.ToLower();
            string imageurl = "image/";
            switch (exename)
            {
                case ".txt":
                    imageurl = imageurl + "txt.jpg";
                    break;
                case ".jpg":
                    imageurl = imageurl + "img.jpg";
                    break;
                case ".doc":
                    imageurl = imageurl + "doc.jpg";
                    break;
                case ".rar":
                    imageurl = imageurl + "rar.jpg";
                    break;
                case ".exe":
                    imageurl = imageurl + "exe.jpg";
                    break;
                default:
                    imageurl = imageurl + "unkown.jpg";
                    break;
            }
            html += "<tr><td><img src='" + imageurl + "'onclick='buttonall(this.a)' a='" + fi.Name + "'/></td><td>" + fi.Name + "</td><td>" + fi.LastAccessTime.ToShortDateString() + "</td></tr>";//
        }

        html += "</table>";
        divv.InnerHtml = html;
    }
  public void buttonall(string p)    
    {
        string html = "<table><tr><td><center><img src='" + p + "' /></center></td></tr></table>";
        DIV2.InnerHtml = html;
    }
我知道红色部分有错误,就是不会调用,哪位解决下,谢谢了,很急!.

解决方案 »

  1.   

    1、onclick='buttonall(this.a)是前台js事件    public void buttonall(string p) 是后台方法...   
    2、建议使用LZ使用StringBuilder,代替上述操作
      

  2.   

    可能我没有说清楚,我的主要目的是想知道如何能在C#中调用JS或者在JS中调用C#,这个是主要问题...
      

  3.   

     public void showdir(string path)
        {
            //获取所有文件夹 
            DirectoryInfo di = new DirectoryInfo(path);
            DirectoryInfo[] d = di.GetDirectories();        StringBuilder html = new StringBuilder();
            html.Append(" <table style='width=400;height=200'> <tr> <td>文件类型 </td> <td>文件名称 </td> <td>最后访问时间 </td> </tr>");
           
            foreach (DirectoryInfo dd in d)
            {
                html.AppendFormat(" <tr> <td> <img src='image/dir.jpg'> </td> <td>{0}</td> <td>{1}<input type='Button' Height='28px' Width='100px'  id={0} value='打开' onclick='' /> </td> </tr>", dd.Name, dd.LastAccessTime.ToShortDateString());
               
            }        //获取所有文件 
            FileInfo[] files = di.GetFiles();
            foreach (FileInfo fi in files)
            {
                string exename = fi.Extension.ToLower();
                string imageurl = "image/";
                switch (exename)
                {
                    case ".txt":
                        imageurl = imageurl + "txt.jpg";
                        break;
                    case ".jpg":
                        imageurl = imageurl + "img.jpg";
                        break;
                    case ".doc":
                        imageurl = imageurl + "doc.jpg";
                        break;
                    case ".rar":
                        imageurl = imageurl + "rar.jpg";
                        break;
                    case ".exe":
                        imageurl = imageurl + "exe.jpg";
                        break;
                    default:
                        imageurl = imageurl + "unkown.jpg";
                        break;
                }
                html.AppendFormat(" <tr> <td> <img src=\"{0}\" onclick='buttonall(this.a)' a=\"{1}\" /> </td> <td>{1}</td> <td>{2} </td> </tr>", imageurl, fi.Name, fi.LastAccessTime.ToShortDateString());           
            }
            html.Append(" </table>");
        } 
    前台调用后台
     <script type="text/javascript">        function show(path) {
                __doPostBack('后台方法', path);
            }
        
        </script>
    注:前台也可以直接生成html
      

  4.   

    C#调用js: ScriptManager.RegisterStartupScript(this, this.GetType(), "click", "js", true);js调用c#:
    __doPostBack("后台方法","后台方法参数")
      

  5.   

    aspx中LinkButton的代码:
    <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">button1</asp:LinkButton>在html中的源码中被翻译成了:
    <a id="LinkButton1" href="javascript:__doPostBack('LinkButton1','')">button1</a>上面的代码可以明显的看出,LinkButton只不过就是一个超链接,他的链接就是执行javascript语句通过调用__doPostBack函数来调用服务器端的后台代码的。因此,在有LinkButton的页面,会自动加上上面的__doPostBack函数。但是在我们调用__doPostBack函数时,有些时候调用这个函数会出现"对象不存在"的脚本错误? 那是因为Html里面没有__doPostBack函数体,一般在拖放那些有自动回传功能的控件时,当把他的autoPostback属性设为True,在运行的时候系统会自动添加__doPostback函数体,当然最直接的办法就是添加一个LinkButton然后把其Text属性设为空,切记不要设Visible属性,因为如果Visible=false,在翻译成Html时,直接就忽略LinkButton的存在了。
      

  6.   

    建议你点击事件用JS写,而不是去调用服务器的方法。因为你动态加的那个<img>是客户端控件,不是服务湍的
      

  7.   

     html.AppendFormat(" <tr> <td> <img src=\"{0}\" onclick='buttonall(this.a)' a=\"{1}\" /> </td> <td>{1}</td> <td>{2} </td> </tr>", imageurl, fi.Name, fi.LastAccessTime.ToShortDateString());           
    我这里的onclick='buttonall(this.a)'不是也需要改成onclick='show()'?