如何在没有隐藏输入字段的情况下将值从javascript(innerhtml)传递到asp.net codeehind
How do I pass values from javascript (innerhtml) to asp.net codebehind without hidden input field?
我有一个aspx页面(主页),当使用window.loaded事件单击按钮时,我用它在另一个aspx页面(弹出窗口)上填充一些div。代码如下:
mainpage.aspx 上的脚本
<script type="text/javascript">
window.callback = function (doc) {
if (document.getElementById('GridView2') != null)
{
// Get Gridview HTML and wrap it with <table> tag
var temp = document.getElementById('GridView2').innerHTML;
var temp2 = "<table>" + temp + "</table>";
doc.getElementById('foo').innerHTML = temp2; // this works fine
}
else
{
// GridView is missing, do nothing!
}
}
function openWindow() {
// Only open a new Compose Email window if there is a Gridview present
if ((document.getElementById('GridView2') != null)) {
var mywindow = window.open("Popup.aspx");
}
else {
alert("Please create GridView first");
}
}
Popup.aspx 上的代码
<script type="text/javascript">
function loaded() {
window.opener.callback(document);
alert(document.getElementById('foo').innerHTML); //This alerts the code I need
//var input = document.createElement("input");
//input.setAttribute("type", "hidden");
//input.setAttribute("name", "testinput");
//input.setAttribute("runat", "server");
//input.setAttribute("value", document.getElementById('foo').innerHTML);
////append to form element that you want .
//document.getElementById("foo2").appendChild(input);
}
</script>
<asp:Button OnClick="Send_Email_Button_Click" ID="SendEmail" Text="Send Email" CssClass="Button1" runat="server" />
<div id="foo" runat="server">
</div>
Popup.aspx。cs
protected void Send_Email_Button_Click(object sender, EventArgs e)
{
string subject = String.Format("TEST EMAIL");
string mailto = "me@mysite.com";
string mailfrom = Environment.UserName + "@mysite.com";
string mailBody = "<h1>Testing</h1>";
MailMessage mail = new MailMessage(mailfrom, mailto, subject, null);
mail.IsBodyHtml = true;
mail.Body = mailBody;
SmtpClient smtpClient = new SmtpClient("smtphost");
smtpClient.Credentials = CredentialCache.DefaultNetworkCredentials;
try
{
smtpClient.Send(mail);
}
catch (Exception ex)
{
}
}
现在,我正试图将div.innerhtml的值传递给codeehind,这样我就可以用这个HTML标记创建一封电子邮件了。我尝试使用一个隐藏的div,但在一个输入字段中收到了一个关于RequestValidation:html代码的asp.net错误,这是一个公平的观点。我似乎无法访问div.InnerHtml。我得到了值"''r''n''r''n"。我有我需要的值,但它是用Javascript编写的,我只需要一种方法将这个值转换为C#,这样我就可以发送电子邮件了。
当我点击SendEmail按钮时,我会再次收到警报(因为正在调用window.loaded)。如何使Popup.aspx只填充一次,而不是每次单击按钮时都填充?如何传递innerhtml值以使SendEmail正常工作?非常感谢您的光临。
要将一些数据发送到代码背后,有两种方法。发布和获取。
一种是通过post-back发送数据,这意味着你需要将它们添加到一个隐藏的或其他通过post发送数据的输入控件中。
另一种是将它们作为参数添加到url中。
这两种方法都可以与ajax调用一起使用。因此,选择一个并将您的数据发送到代码隐藏。
关于信息:
Request Validation: html code in an input field
这是一种通用的安全措施,在您的情况下,如果您知道要在代码背后发送html代码,并且知道如何控制它,只需简单地禁用它,不必担心,只需小心稍后要呈现的内容。
来自ASP。NET:
如果您希望应用程序接受HTML,这可能是个问题加成例如,如果您的网站允许用户添加评论,您可能希望允许用户使用HTML标记执行基本格式设置粗体或斜体文本在这种情况下,您可以禁用请求手动验证和检查恶意内容,或者您可以自定义请求验证,以便某些类型的标记或脚本接受
更新
工作的示例代码:主页
<head runat="server">
<title></title>
<script type="text/javascript">
window.callback = function (doc) {
doc.getElementById('SendBack').value = escape("<b>send me back</b>");
}
function openWindow() {
var mywindow = window.open("Page2PopUp.aspx");
}
</script>
</head>
<body>
<form id="form1" runat="server">
<a href="#" onclick="openWindow();return false">open pop up</a>
</form>
</body>
</html>
弹出页面
<head runat="server">
<title></title>
<script type="text/javascript">
function GetDataBack() {
window.opener.callback(document);
}
</script>
</head>
<body >
<form id="form1" runat="server">
<div>
<input id="SendBack" name="SendBack" value="" type="hidden" />
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" OnClientClick="GetDataBack()" />
<asp:Literal runat="server" ID="txtDebugCode"></asp:Literal>
</div>
</form>
</body>
</html>
并读取:
protected void Button1_Click(object sender, EventArgs e)
{
txtDebugCode.Text = Server.UrlDecode(Request.Form["SendBack"]);
}
因此,经过半天的思考,我终于只使用代码处理了客户端和服务器脚本。我从未听说过服务器。转移和页面。上一页,所以它对我很有用,但事实证明这正是我所需要的。
这里有一篇优秀的msdn文章详细解释了这个概念,但只要说如果使用Server,就可以访问上一页的控件。转移以打开新页面。现在我以为我的麻烦到此为止了,但显然是服务器。传输是古老的,它扰乱了UpdatePanel处理回发的方式。另一篇解释问题和解决方法的精彩文章在这里。我使用了PostBackTrigger上的msdn文章,最终使我的代码工作起来。
最后,作为阿里斯托斯的疯狂道具,他坐下来帮助我度过了难关,所以我要把他的答案标记为正确的答案——因为我的答案是另一种选择,而不是我问题的答案。仅此而已,伙计们!
- Javascript form innerHTML
- JavaScript上的表单和innerHTML问题
- 为什么JavaScript可以'找不到给定的InnerHTML并返回Cannot set property
- Javascript innerHTML超出范围的问题
- Javascript 使用 document.write 编写 innerHtml 的值
- 不能在javascript innerHTML中具有类
- 无法设置属性'innerHTML'在javascript中为null
- JavaScript没有将结果值设置为<p>'的innerHTML
- Javascript innerHTML with form
- InnerHTML 调用 JavaScript 函数 onchange.
- JavaScript-innerHTML在setInterval中不独立运行
- InnerHtml 不起作用的 Javascript 变量
- 将包含 javascript 的文本绑定到模板中的 innerHTML
- replace asterisk innerhtml javascript
- change innerhtml javascript
- innerHTML javascript dynamic
- 在.innerhtml javascript函数中创建锚文本
- 如何将对象传递给innerHTML (JavaScript)中的函数
- 几秒钟后文本发生变化http.responseText,.innerHTML(Javascript,Ajax)
- 可以't Read属性innerHTML Javascript