window.loaded イベントを使用してボタンをクリックすると、別の aspx ページ (ポップアップ) にいくつかの div を設定するために使用する aspx ページ (メインページ) があります。コードは以下のとおりです。
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>
ポップアップ.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 の値を分離コードに渡そうとして行き詰っているので、この HTML マークアップを使用して電子メールを作成できます。非表示の div を使用してみましたが、Request Validation: html code in an input フィールドに関する asp.net エラーが発生しました。これは公正なポイントです。div.InnerHtml にアクセスできないようです。「\r\n\r\n」という値を取得します。私は必要な値を持っていますが、それは Javascript です。メールを送信できるように、この値を C# に取得する方法が必要です。
[SendEmail] ボタンをクリックすると、再びアラートが表示されます (window.loaded が呼び出されているため)。ボタンがクリックされるたびにではなく、Popup.aspx が 1 回だけ読み込まれるようにするにはどうすればよいですか? そして、SendEmail を機能させるために innerhtml 値を渡す方法は? ご覧いただきありがとうございます。