ajax.net c#获取javascript的object问题,(顶也有分)

ojekleen 2007-12-04 04:25:04
javascript:
每个var定义的都是objcet,我自定义一个function
function Employee(empNo)
{
this.EmpNO=empNo;
}

再一个function使用ajax.net技术(在下拉列表onchage触发):

function onChange(mainValue)
{
var emp=new Employee(mainValue);
var obj=WebForm1.GetName(emp);
alert(obj.EmpNO);
}

html代码:
<SELECT onchange="javascript:onChange(value);" runat="server" id="ddlFamliyName" style="Z-INDEX: 101; LEFT: 88px; WIDTH: 96px; POSITION: absolute; TOP: 56px">
<OPTION value="0" >请选择</OPTION>
<OPTION value="1">关</OPTION>
<OPTION value="2">张</OPTION>
<OPTION value="3">赵</OPTION>
<OPTION value="4">马</OPTION>
<OPTION value="5">黄</OPTION>
</SELECT>

c#代码:
public class Employee
{
private string empNo = "";
public string EmpNo
{
get { return empNo; }
set { empNo = value; }
}


}
[Ajax.AjaxMethod()]
public string GetName(object emp)
{
//Employee ee=(Employee)emp;
string a=emp.EmpNo;
return a;}

但是c#获得object emp中是一个System.DBNull,有没有方法通过ajax来传递一个带有属性的javascript 的object到c#。
很显然,var obj=WebForm1.GetName(emp);是一个对象,也就是说微软已经用了把c#的一些类型和javascript的类型的转换。
...全文
753 61 打赏 收藏 转发到动态 举报
写回复
用AI写文章
61 条回复
切换为时间正序
请发表友善的回复…
发表回复
hjj32345 2012-08-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

我也帮你顶下
[/Quote]

ppp
zjmotion 2007-12-19
  • 打赏
  • 举报
回复
.net真的害死人,它很方便地让人开发出项目,降低了程序门槛,但坏处就是很多人不知道里面到底发生了什么事。
就好比在VS里的工具栏里拖一下,界面上就有了一个文本控件一样。
难道文本控件就是这样生成的么?当然不是,真正生成的控件是因为后台的new TextBox()代码。
ajax.net也一样,后台的C#怎么能和前台的js通讯呢?这完全是办不到的。
但ajax.net给人的感觉的确是C#能接收到前台的js值。所以才会让你想到传一个带属性的js类给C#。自然也是异想天开。
那么C#是如何处理传过来的值?实际上这只是一种模拟。
比如有如下一段代码:

<script runat="server">
public string C_v = "Hello World!";
<script>


然后我在JS中要对处理C_v进行处理。
很显然,下面的代码是错误的,js怎么能和C#通信呢?

<script type="text/javascript">
var J_v = C_v;//js不能和C#通讯
<script>


下面的代码可以做到

<script type="text/javascript">
var J_v = <%=C_v%>//这是一种模拟状态
<script>


这个时间,J_v有了一个值,而且和C_v的值一样,我们认为是将C_v赋给了J_v。
事实上这只是一种模拟状态,C_v和J_v之间没有进行任何操作。

所以,理解了原理,你认为你的需求还有意思吗?不要浪费这种时间了。
tongtai 2007-12-06
  • 打赏
  • 举报
回复
JSON(JavaScript Object Notation)可搞定.
JSON一種類似于XML的文本數據交換格式.官網: http://json.org/
而將C#對象轉換為JSON String的Net實現有許多,like jayrock.
用它可在Server將json string 與C# Object 相互轉換.
json2.js 用它在Client可將client javascript object 與 json string相互轉換.

ASP.NET Ajax中也使用許多JSON來代替XML.

sample 就不再列出了,方向已有了,不明白就google一下吧.
EricJaking 2007-12-05
  • 打赏
  • 举报
回复
顶。
zjmotion 2007-12-05
  • 打赏
  • 举报
回复
那么,模拟js.其它都不变,onChange改成:


function onChange(mainValue)
{
var emp=new Employee(mainValue);
var obj=GetName(emp);//或者var obj=eval(GetName(emp)); ?
alert(obj.EmpNO);
}



GetName改成

public object GetName(object emp)
{
return emp;
}


我觉得还是很乱.总之C#里只能模拟js,而不能执行js.
zjmotion 2007-12-05
  • 打赏
  • 举报
回复
既然都到这份上了,那就研究一下也好.
不过我还是坚持.net只是一个开发工具,既然研究js,那么就应该抛开.net,因为ajax.net最后生成的还是javascript.


<script type="text/javascript">
function Employee(empNo)
{
this.EmpNO=empNo;
}

function onChange(mainValue)
{
var emp=new Employee(mainValue);
var obj=GetName(emp);
alert(obj.EmpNO);
}

function GetName(emp)
{
return emp;
}
</script>


<SELECT onchange="javascript:onChange(value);" runat="server" id="ddlFamliyName" style="Z-INDEX: 101; LEFT: 88px; WIDTH: 96px; POSITION: absolute; TOP: 56px">
<OPTION value="0" >请选择</OPTION>
<OPTION value="1">关</OPTION>
<OPTION value="2">张</OPTION>
<OPTION value="3">赵</OPTION>
<OPTION value="4">马</OPTION>
<OPTION value="5">黄</OPTION>
</SELECT>


这是最终的JS模型,是正常的.
那么回过头来看,问题就是如何用ajax.net生成这段了.

function GetName(emp)
{
return emp;
}
zjmotion 2007-12-05
  • 打赏
  • 举报
回复
如果你是在学术研究,可以.
如果你是在实际开发应用,那就应该考虑一下了,不能为了面向对象而去面向对象.
tongtai 2007-12-05
  • 打赏
  • 举报
回复
關鍵是怎樣將javascript轉換為C#對象,或反過來.
javascript object---->可以被序列化
C# object------------>可以被序列化
是否可使用此思路?
zj1989 2007-12-05
  • 打赏
  • 举报
回复
关注、学习、帮顶 @_@
ojekleen 2007-12-05
  • 打赏
  • 举报
回复
TO:
zjmotion
旁门左道
等 级:
我只是举个例子,就是想知道你到底要做什么.
我觉得不应该搞得这么复杂.

这不是复杂,只是种面向对象的想法,按你这样:ORM也不应该搞得这么复杂.

TO:hdt
倦怠
等 级:
把你清楚的说下就行了,谢谢!!
zhouxian0518 2007-12-05
  • 打赏
  • 举报
回复
顶下。。。。。。
zjmotion 2007-12-05
  • 打赏
  • 举报
回复
我只是举个例子,就是想知道你到底要做什么.
我觉得不应该搞得这么复杂.
真相重于对错 2007-12-05
  • 打赏
  • 举报
回复
反编译以下ajaxpro就应该清楚了
ojekleen 2007-12-05
  • 打赏
  • 举报
回复
TO:cangwu_lee
橙子
等 级:
我没说过是执行删除,还有,如果我有20textbox呢?用textbox值来判断。
你也要我用post一个参数?
cangwu_lee 2007-12-05
  • 打赏
  • 举报
回复
POST 一個參數 ACTION=DELETE&FIRSTNAME=張

再從後臺執行 delete from <table> where firstName='" + firstName+ "'"
ojekleen 2007-12-05
  • 打赏
  • 举报
回复
当选择了"张",然后数据库里姓张的数据就全部删除.
这只是一个例子,有可能通过js获得页面N个值,赋值给一个js自定义类型,
这样就不用在使用ajax的时候N多参数(可能有几十甚至几百)所有才想到这种方法的。

其实在js里变量也是object类型,所有问js有没有办法封装object
function Employee(empNo)
{
this.EmpNO=empNo;
}
--------------------------------
你这个方法可能行不通!因为没有EmpNO属性!JS好像不能自定义属性吧!
js就是这样自定义属性的,你google,baidu就知道了。

zjmotion 2007-12-05
  • 打赏
  • 举报
回复

function Employee(empNo)
{
this.EmpNO=empNo;
}



function是一个方法,就和C#的


public void Employee()
{

}

一样,不能自定义属性.


楼主可能还是没有明白我的意思.
我是想让你把你想要做的需求说出来,不要涉及具体实现.
因为你的具体实现可能有问题,你只要把你想实现的最终结果告诉我们,
或许我们可以给你提供最好的解决方法,而不是你现在这样的.

比如:
<OPTION value="1">关</OPTION>
<OPTION value="2">张</OPTION>
<OPTION value="3">赵</OPTION>
<OPTION value="4">马</OPTION>
<OPTION value="5">黄</OPTION>

当选择了"张",然后数据库里姓张的数据就全部删除.


这样描述就好了.
chuxue1342 2007-12-05
  • 打赏
  • 举报
回复
function Employee(empNo)
{
this.EmpNO=empNo;
}
--------------------------------
你这个方法可能行不通!因为没有EmpNO属性!JS好像不能自定义属性吧!
oneflyf 2007-12-05
  • 打赏
  • 举报
回复
学习下
miaohuaying 2007-12-05
  • 打赏
  • 举报
回复
帮顶
加载更多回复(41)

111,119

社区成员

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

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

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