跪求C#操作JS与JS操作C#的问题

changjian1444 2009-12-18 10:33:17
具体的情况是这样的,我做的是一个网络文件夹功能的网页,可以通过点击列表中的图片名称所在行(就是点击那个前面的代表图片的标示),然后在一个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;
}
我知道红色部分有错误,就是不会调用,哪位解决下,谢谢了,很急!.
...全文
174 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
to_tom 2009-12-18
  • 打赏
  • 举报
回复
是的,如果使用5楼的方法就一定要改
changjian1444 2009-12-18
  • 打赏
  • 举报
回复
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()'?
woshifou 2009-12-18
  • 打赏
  • 举报
回复
学习。
limii 2009-12-18
  • 打赏
  • 举报
回复
建议你点击事件用JS写,而不是去调用服务器的方法。因为你动态加的那个<img>是客户端控件,不是服务湍的
liu2835993 2009-12-18
  • 打赏
  • 举报
回复
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的存在了。

liu2835993 2009-12-18
  • 打赏
  • 举报
回复
C#调用js:

ScriptManager.RegisterStartupScript(this, this.GetType(), "click", "js", true);

js调用c#:


__doPostBack("后台方法","后台方法参数")
liu2835993 2009-12-18
  • 打赏
  • 举报
回复


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
changjian1444 2009-12-18
  • 打赏
  • 举报
回复
可能我没有说清楚,我的主要目的是想知道如何能在C#中调用JS或者在JS中调用C#,这个是主要问题...
liu2835993 2009-12-18
  • 打赏
  • 举报
回复
1、onclick='buttonall(this.a)是前台js事件

public void buttonall(string p) 是后台方法...


2、建议使用LZ使用StringBuilder,代替上述操作
平生我自如 2009-12-18
  • 打赏
  • 举报
回复
不会 顶一下
xyz254 2009-12-18
  • 打赏
  • 举报
回复
mark
changjian1444 2009-12-18
  • 打赏
  • 举报
回复
多谢诸位,我这水平不够,一些东西还是不甚了解,我还是找点关于这方面的书看看吧..

111,123

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧