高分求助:关于后台与JS变量互调的问题

nikehotch 2009-04-06 08:35:32
我在JS里面用var index = parseInt(document.getElementById("officeList").selectedIndex);
获取到ListBox中选中值的index,
我想用document.getElementById("Text1").value=' <%=dt.Rows[index(JS声明的变量)]["office_name"].ToString()%>';
读取相对索引行表中的某个字段的值,请问一下,在这段代码里该如何引用该JS变量。
补充:
我使用document.getElementById("Text1").value=' <%=dt.Rows[“‘+index+’”]["office_name"].ToString()%>';提示无法从string转换为int,
如果将index变量换成整数值则能取出。
...全文
194 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
duping9626 2009-04-07
  • 打赏
  • 举报
回复
用异步回调吧实现接口ICallbackEventHandler

<%@ Page Language="C#" %>
<%@ Import Namespace="System.Data" %>
<!--要实现回调接口ICallbackEventHandler-->
<%@ Implements Interface="System.Web.UI.ICallbackEventHandler" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
protected DataTable dt = new DataTable();
private int index = 0;

protected void Page_Load(object sender, EventArgs e)
{

dt.Columns.Add("col1", typeof(int));
dt.Columns.Add("col2", typeof(string));
dt.Rows.Add(1, "A");
dt.Rows.Add(2, "B");
dt.Rows.Add(3, "C");


ClientScriptManager script = this.Page.ClientScript;

//获取客户端函数的引用;调用该函数时,将启动一个对服务器事件的客户端回调
//客户端js函数ReceiveServerData
string cbRefer1 = script.GetCallbackEventReference(this, "index", "ReceiveServerData", "", true);

//动态的js脚本
string referScript = "function CallTheServer(index,context){" + cbRefer1 + "}";

//注册客户端脚本
script.RegisterClientScriptBlock(this.GetType(), "CallTheServer", referScript, true);
}


//返回结果给客户端(接口ICallbackEventHandler的)
public string GetCallbackResult()
{
return dt.Rows[index]["col2"].ToString();
}

//回调事件
public void RaiseCallbackEvent(string eventArgument)
{
index = Convert.ToInt32(eventArgument);
}

</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无标题页</title>

<script language="javascript" type="text/javascript">

function ReceiveServerData(value,context)
{
//value参数就是从后台返回的DataTable值
document.getElementById("Text1").value=value;
}

</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<select id="Select1" onchange="CallTheServer(this.selectedIndex,'')">
<option value ="1">1</option>
<option value ="1">2</option>
<option value ="1">3</option>
</select>
<br />
<input id="Text1" type="text" />
</div>
</form>
</body>
</html>

调试结果,选2对应显示B,选3对应显示C,页面无刷新
nikehotch 2009-04-07
  • 打赏
  • 举报
回复
谢谢各位的解答,结贴了.太感谢大家了,尤其是duping9626朋友,
虽然我用AJAX实现了这个功能,但是你的这种方法让我又学到了新的知识
josephSC 2009-04-07
  • 打赏
  • 举报
回复
直接不刷新页面,将后台的数据取出来, 为什么绕个圈却不用ajax?
nikehotch 2009-04-06
  • 打赏
  • 举报
回复
@yongyinmg
页面在加载时进行了数据绑定,我在ListBox中加入了一个事件属性officeList.Attributes.Add("onChange", "javascript:OnchangeList()");
var index = parseInt(document.getElementById("officeList").selectedIndex); 是在方法中定义的,所以当改变选择项的时候,index就可以获取到当前选择的值,所以页面没有刷新,而在后台如果用officeList.SelectedIndex只能获取到初始的选择项,我是想直接不刷新页面,将后台的数据取出来
yongyinmg 2009-04-06
  • 打赏
  • 举报
回复
想了一下,感觉上面的方法不行
想从js往后台传js变量个人觉得用这种尖括号和百分号的方法实现不了
<%=%>中的方法应该是在服务器上执行asp.net网页时就执行了,然后把执行的结果
和html代码一起发送到客户端,此时方法已经执行过了,尖括号中的js变量应该是用户
还没有进行选择listbox的index时的值,选择后的index,在没有重新提交服务器时,使不能
传递到后台的.
感觉只能用ajax了
yongyinmg 2009-04-06
  • 打赏
  • 举报
回复
可以再后台c#代码中可以定义
public string GetStr(DataTable dt,string index)
{
return dt.Rows[Convert.ToInt32(index)]["office_name"].ToString();
}
前段js
function test()
{
document.getElementById("Text1").value=<%=GetStr()%>;
}
Steve 2009-04-06
  • 打赏
  • 举报
回复
前台不submit,不用Ajax怎么可能取得后台变量?
你朋友写的一定是server端的JS,记混了.
解释多余的 2009-04-06
  • 打赏
  • 举报
回复
ding
nikehotch 2009-04-06
  • 打赏
  • 举报
回复
@runffer_yang

我听我一个朋友说过可以这样取到JS的变量,他以前做个,只是找不到代码了。
Steve 2009-04-06
  • 打赏
  • 举报
回复
这么写是不行的,asp代码先被解释成HTML,所以你这样写不能取到想要的值.
或者用ajax去后台取,或者把dt.Row翻译成JS的数组在生成页面的时候转换成
JS的数组,这样JS就可以参照了.
fengjian_428 2009-04-06
  • 打赏
  • 举报
回复
不知道在说什么
nikehotch 2009-04-06
  • 打赏
  • 举报
回复
第一次发贴,高手些帮个忙吧,急等啊

62,268

社区成员

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

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

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

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