asp.net c#向html内传值问题,高手请来

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了asp.net c#向html内传值问题,高手请来相关的知识,希望对你有一定的参考价值。

动态在主页生成的链接,现在单击链接会打开一个html页面,该页面内有一个iframe,他的src属性指定一个aspx页面。以此动态显示数据,如果直接代开aspx页面的话可以指定属性NavigateUrl=?参数值。但是这个页面在iframe里,如何能把值传给iframe的src里,或者有其他办法,希望高手帮忙

可以用javascript实现:
1 假设你的父页面为A.ASPX,打开页面为B.HTML,嵌入页面为C.ASPX
2 对A.ASPX中的链接做如下处理:当链接click事件执行时,给A.ASPX中添加一个<INPUT TYPE="HIDDEN" /> 或者隐藏<DIV/>都可以,把需要存的属性值放进去。
3 打开B.HTML之后,WINDOW.ONLOAD执行时,取得WINDOW.OPENER.DOCUMENT中的INPUT或DIV中的值,赋值给IFRAME.SRC就可以了。
这种方案只能在链接的TARGET为_blank时可以。

如果要在A.ASPX所在的窗口中打开B.HTML,只能通过AJAX之类的异步交互实现了:
1 在点击链接的同时把需要的参数值放入SESSION中
2 在B.HTML页面中定义一个XMLHTTPREQUEST对象,在加载完DOCUMENT后执行对一个服务方法(这个方法可以获得SESSION)的调用
3 最后在回调函数里对IFRAME.SRC进行赋值。
参考技术A 也就是说aspx页面中的连接是一个纯html页面?html中的iframe是aspx?
假设主页是a,连接页是b,iframe页是c
一种是把b.html换成aspx的,a链接中把参数及值通过b.aspx?someone=value传给b,b的cs文件中定义一个public变量someone在Page_load中用someone=Request.Params["someone"],然后再b的aspx文件中的iframe的src写成c.aspx?someone=<%=someone%>
一种是通过js脚本传递,给b.html传值方式不变b.html?someone=value,b页面中js部分写法如下
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>
<script type="text/javascript">
function transfer()
var url = document.location.href;
var paraString = url.substring(url.indexOf("?")+1,url.length);

if (document.all)
document.frames["test"].document.location.href= "c.aspx?" + paraString;
else
document.getElementById("test").src = "c.aspx?" + paraString;;


</script>
<body onload="transfer();">
<iframe id="test" name="test"></iframe>
</body>
</html>
参考技术B 你用A的话,指定name就可以了:如:
<a href="aa.aspx" target="iframeName">点我</a>
<iframe name="iframeName"></iframe>
如果是其它,只能用JS改变src属性了,如:
document.getElementById("iframeName").src = "你要打开的页面"
参考技术C iframe里面的src后面带参数就行了。 参考技术D src="test.aspx?NavigateUrl=?"追问

NavigateUrl=?问号里的值怎么传进去呢?

追答

你的意思是你点链接的时候连接时 a.html要给他传递一个参数,然后iframe里面显示根据这个参数变化的aspx的网页吧

追问

追答

方法一:你可以借助一下cookie,在新的页面再用js读取这个参数,给iframe的src赋值就可以了。js不会操作cookie我可以给你代码
方法2:

下面代码刚才试过了可以a.html?url=aa可以这样传递。
比如你的iframe的id是myiframe
在iframe的下面加入js document.getElementById("myiframe").src="test.aspx?NavigateUrl="+request.QueryString("url");

//下面的存成一个html文件,比如a.html,放在web服务器上a.html?url=aa,就会弹出提示aa,说明参数已经取到

  

  

  //获得参数的方法

  var request =

  

  QueryString : function(val)

  

  var uri = window.location.search;

  var re = new RegExp("" +val+ "=([^&?]*)", "ig");

  return ((uri.match(re))?(uri.match(re)[0].substr(val.length+1)):null);

  

  

  

  

  

  

  //调用方法获得参数

  var rt = request.QueryString("url");

  alert(rt);

  

  

  

本回答被提问者采纳

ASP.NET跨页面传值技巧[总结]

个人网站:http://www.51pansou.com

.net视频下载:.net视频教程

.net源码下载:.net源码

关于页面传值的方法,我就我个人观点做了些总结,希望对大家有所帮助。

1.  使用QueryString变量

QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中。如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法。但是对于传递数组或对象的话,就不能用这个方法了。下面是一个例子:

a.aspx的C#代码

private void Button1_Click(object sender, System.EventArgs e)
{
    string s_url;
    s_url = "b.aspx?name=" + Label1.Text;
    Response.Redirect(s_url);
}

b.aspx中C#代码
private void Page_Load(object sender, EventArgs e)
{
    Label2.Text = Request.QueryString["name"];
}

2.  使用Application 对象变量

Application对象的作用范围是整个全局,也就是说对所有用户都有效。其常用的方法用Lock和UnLock。

a.aspx的C#代码

private void Button1_Click(object sender, System.EventArgs e)
{
    Application["name"] = Label1.Text;
    Server.Transfer("b.aspx");
}

b.aspx中C#代码

private void Page_Load(object sender, EventArgs e)
{
    string name;
    Application.Lock();
    name = Application["name"].ToString();
    Application.UnLock();
}

3.  使用Session变量

想必这个肯定是大家使用中最常见的用法了,其操作与Application类似,作用于用户个人,所以,过量的存储会导致服务器内存资源的耗尽。

a.aspx的C#代码

private void Button1_Click(object sender, System.EventArgs e)
{
    Session["name"] = Label.Text;
}

b.aspx中C#代码

private void Page_Load(object sender, EventArgs e)
{
    string name;
    name = Session["name"].ToString();
}

4.  使用Cookie对象变量

这个也是大家常使用的方法,与Session一样,其是什对每一个用户而言的,但是有个本质的区别,即Cookie是存放在客户端的,而session是存放在服务器端的。而且Cookie的使用要配合ASP.NET内置对象Request来使用。

a.aspx的C#代码

private void Button1_Click(object sender, System.EventArgs e)
{
    HttpCookie cookie_name = new HttpCookie("name");
    cookie_name.Value = Label1.Text;
    Reponse.AppendCookie(cookie_name);
    Server.Transfer("b.aspx");
}

b.aspx中C#代码

private void Page_Load(object sender, EventArgs e)
{
    string name;
    name = Request.Cookie["name"].Value.ToString();
}

5.  使用Server.Transfer方法

这个才可以说是面象对象开发所使用的方法,其使用Server.Transfer方法把流程从当前页面引导到另一个页面中,新的页面使用前一个页面的应答流,所以这个方法是完全面象对象的,简洁有效。

a.aspx的C#代码

public string Name
{
    get{ return Label1.Text;}
}
private void Button1_Click(object sender, System.EventArgs e)
{
    Server.Transfer("b.aspx");
}

b.aspx中C#代码
private void Page_Load(object sender, EventArgs e)
{
    a newWeb;   //实例a窗体
    newWeb = (source)Context.Handler;
    string name;
    name = newWeb.Name;
}

个人网站:http://www.51pansou.com

.net视频下载:.net视频教程

.net源码下载:.net源码

以上是关于asp.net c#向html内传值问题,高手请来的主要内容,如果未能解决你的问题,请参考以下文章

asp.net mvc中Controller向View传值方式总结

ASP.NET跨页面传值技巧(C/S)

ASP.NET MVC Action向视图传值之匿名类型

asp.net web服务应用程序问题 高手速进 c#

asp.net (C#) 平台下如何加密用户登录密码?请高手请教。

求助。asp.net 比较GET和POST传值方法