高手求助:JS与 C# DLL动态库

cs_lyl 2007-03-01 09:49:09
简单说问题是我在客户端用 JS 从服务器取得的了一个XML文件
var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
var xmldoc = new ActiveXObject("Msxml2.DOMDocument");
var url = "default.aspx" ;
xmlhttp.Open("POST",url,false);
xmlhttp.Send("");
var result = xmlhttp.ResponseText;
xmldoc.loadXML(result);
现在我需要把xmldoc里的数据发送到本地DLL文件处理打印,我该怎么发送?
已经知道的的处理方式: 1保存成本地文件 把路径发送给DLL文件读取
2以字符串形式发送
<body bgcolor='#223344'>
<script language="javascript">
<!--
var s="路径 or 字符串?"
function show()
{
return s;
}

-->
</script>
<object id="HelloWorld" classid="clsid:C4483974-AE04-4ec8-A53C-541FD73A3C15" Width="256" Height="96" > </object>
<br>
<input type='button' onclick='HelloWorld.receive(show())' value='Click'>
</body>
请问有没有更好的方式? 请各位大虾帮忙,JS实在太差。。。
...全文
382 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
cs_lyl 2007-03-07
  • 打赏
  • 举报
回复
TO wanghui0380(放歌)
1.你还是用XMLHTTP把值回传给服务器
2.你可以在服务器端写一个转用web serviece来处理

呵呵 这只是个子项目,服务器上挂的东西太多了,都用服务器处理下面客户端就全完蛋了
数据库里面是一个市或者一个县的数据。
再说不是每个地方每个公司的服务器都会用上IBM,有的现在的服务器和家用台式机差不了多少(明明CGD有钱的……)
cs_lyl 2007-03-07
  • 打赏
  • 举报
回复
我决定先用字符串了。 再考虑下把XML文件拆分了成2个, 一个保存DATASET结构一个存放数据,再把数据转换成二维数组发送。
batiraul 2007-03-05
  • 打赏
  • 举报
回复
以前做类似项目时是这么处理的——aspx用js向剪贴板拷贝打印用的数据字符串(格式化好了的),此时客户端机器上运行着的一个自己编写的托盘程序(现在可以用win service代替实现)自动实时监视剪贴板上是否有需要打印的数据,监视到就从剪贴板中获取数据打印出来。
实现打印的程序可以做成自动启动的win service
<script language="javascript">
var IsPrint = "<%=IsPrint%>";//判断是否有正确接收到的xml数据
var PrintInfo = "<%=PrintStr%>";//post进来的正确xml内容
if(IsPrint=="1")
{
clipboard.setData(PrintInfo);//剪贴板设置打印数据
}
</script>
cs_lyl 2007-03-05
  • 打赏
  • 举报
回复
其实这个项目只是项目组在以前一个项目的子项目 ,现在子项目由WINFORM改成BS,打印那一块直接调用以前的DLL 是为了节省成本,再就是由于打印格式的要求太高只能自己编码处理,所以不会考虑直接在后台调用打印机。至于VISTA,这个项目是行业软件,我估计没有哪个企业短时间里会为了前卫而花大把的银子来更换自己的管理和经营软件。
实在没有解决的方法就打算结帖了。。
cs_lyl 2007-03-05
  • 打赏
  • 举报
回复
谢谢各位 这两天休息事情多,没有上来看
wanghui0380 2007-03-05
  • 打赏
  • 举报
回复
1.你还是用XMLHTTP把值回传给服务器
2.你可以在服务器端写一个转用web serviece来处理
cs_lyl 2007-03-05
  • 打赏
  • 举报
回复
实时监控做起来更复杂了,这里现在的的解决方案是将要打印的数据查询出来装入DATASET 用JS发送请求给服务器以XML格式发送给客户端,再由JS发送的DLL还原成DATASET打印(这一DLL处理部分已经有了,问题是JS怎么发送数据)。
具体实现是前台页面有个打印按键
<input type='button' onclick='HelloWorld.receive(show())' value='Click'>
onclick事件调用的是本地DLL文件HelloWorld里的接受方法receive,参数是JS函数show();我可以通过show()发送请求给服务器取得需要打印的DATASET的XML,现在问题就来了我要怎么写返回值给DLL文件, 字符串是无法发送大量数据的,生成本地文件有安全级别的限制……
syeerzy 2007-03-03
  • 打赏
  • 举报
回复
手误 是 IE保护模式
syeerzy 2007-03-03
  • 打赏
  • 举报
回复
换个设计吧,这个设计即将没用. (Vista下这种设计通不过IE安全模式....)
jiahuafu 2007-03-02
  • 打赏
  • 举报
回复
接分!
jetxia 2007-03-02
  • 打赏
  • 举报
回复
mark
batiraul 2007-03-02
  • 打赏
  • 举报
回复
以上js段放在</body>前就可以了
batiraul 2007-03-02
  • 打赏
  • 举报
回复
那就试试这样做可行否——

用a.aspx完成发送xml(post方式)到自己a.aspx?print=1(打印xml标记),判断参数print后,在a.aspx上接收xml数据((stream)request.inputstream.readtoend();),再用js把这个数据打印出来。
比如:
<!--实现打印-->
<script language="javascript">
var IsPrint = "<%=IsPrint%>";//判断是否有正确接收到的xml数据
var PrintInfo = "<%=PrintStr%>"; //post进来的正确xml内容
if(IsPrint=="1")
{
printxml(PrintInfo);//实现打印的js函数
}
</script>
cs_lyl 2007-03-02
  • 打赏
  • 举报
回复
哎 都沉掉了 。。。。
cs_lyl 2007-03-01
  • 打赏
  • 举报
回复
呵 再次感谢Batiraul(Bati4Ever)。只是我现在主要是想知道有没有更好的传递这个保存了DATASET内容的XML文件的方法…… 至于这个XML怎么处理已经有以前写好的DLL文件 现在只需要发送这个XML
cs_lyl 2007-03-01
  • 打赏
  • 举报
回复
十分感谢Batiraul(Bati4Ever) …… 先研究下
batiraul 2007-03-01
  • 打赏
  • 举报
回复
转个2003-2-14的————
************************************
服务器端程序方式、打印预览接口调用,下面为例,主要参考项目中的:pageErrorPrint.aspx.vb文件

主调用页

function PrintPage(iPageIndex,strQuery)

{

var strURL;

strURL = "PageErrorPrint.aspx?PageIndex=" + iPageIndex + "&QueryString=" + strQuery;

winPrint=window.open(strURL,"","left=2000,top=2000,fullscreen=3");

}

打印页HTML源中的预览控制

<SCRIPT language="javascript">

document.write("<object ID='WebBrowser' WIDTH=0 HEIGHT=0

CLASSID='CLSID:8856F961-340A-11D0-A96B-00C04FD705A2'></object>");

WebBrowser.ExecWB(7,1);

window.opener=null;

window.close();

</SCRIPT>


程序头

'首先声明表格容器

Protected WithEvents phContainer As System.Web.UI.WebControls.PlaceHolder

'每个表格中的记录数量

Private Const ItemPerTable As Integer = 20

关键的实现部分

'创建一个符合打印要求的表格

tabPagePrint = NewPrintTable()

'将表头添加到此表格中

Call AddTableTitle(tabPagePrint)



'初始化记录器

i = 0

iItemIndex = iStartPoint

For Each clsItem In clsAllData.ErrorCollection

If i > 0 And i Mod ItemPerTable = 0 Then

'添加表格控件到页面中

phContainer.Controls.Add(tabPagePrint)

'在页面中添加一个换行符

Call AddPageBreak()



'创建新一轮的表格

tabPagePrint = NewPrintTable()

Call AddTableTitle(tabPagePrint)

End If



'将记录添加到表格中

Call AddItemToTable(iItemIndex, tabPagePrint, clsItem)

iItemIndex = iItemIndex + 1

i = i + 1

Next



'添加表格控件到页面中

phContainer.Controls.Add(tabPagePrint)


支持函数

'功能:添加页的换行符

Private Sub AddPageBreak()

Dim ltBreak As LiteralControl

ltBreak = New LiteralControl("<p style='page-break-before:always'>")

phContainer.Controls.Add(ltBreak)

End Sub



'功能:创建一个符合打印要求的表格

Private Function NewPrintTable() As Table

Dim tabSrc As New Table()



tabSrc.Width = Unit.Percentage(100)

tabSrc.Attributes("border") = "1"

tabSrc.CellPadding = 4

tabSrc.CellSpacing = 0

tabSrc.BorderWidth = Unit.Pixel(2)

tabSrc.BorderColor = Color.Black

tabSrc.Style.Add("FONT-SIZE", "12px")

NewPrintTable = tabSrc

End Function
cs_lyl 2007-03-01
  • 打赏
  • 举报
回复
up ………………
求救啊
cs_lyl 2007-03-01
  • 打赏
  • 举报
回复
UP 自己先顶下

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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