2017-06-17 1 views
0

私はそうのような電子メールにリンクしています:TemplateFieldのCheckBoxesからmailto urlを作成するが、電子メールクライアントで空になるボタン?

<asp:BoundField DataField="EmailList" DataFormatString="<a href='mailto:?bcc={0}'>&#9993;</a>" HeaderText="Email Members" HtmlEncodeFormatString="false" SortExpression="EmailList" /> 

は、私がチェックボックスとボタンでこれを置き換えたいです。例:

enter image description here

はここに私のコントロールです:

<asp:GridView ID="GridView1" AllowPaging="True" AutoGenerateColumns="false" DataKeyNames="EmailList" runat="server"> 
    <Columns> 
     <asp:TemplateField> 
      <HeaderTemplate> 
       <asp:Button OnClick="Button1_Click" Text="&#9993;" runat="server" /> 
      </HeaderTemplate> 
      <ItemTemplate> 
       <asp:CheckBox ID="CheckBox1" runat="server" /> 
      </ItemTemplate> 
     </asp:TemplateField> 

はここに私の分離コードです:

protected void Button1_Click(Object sender, EventArgs e) 
{ 
    string url = "mailto:?bcc="; 
    foreach (GridViewRow row in GridView1.Rows) 
    { 
     CheckBox cb = (CheckBox)row.FindControl("CheckBox1"); 
     if (cb.Checked) 
     { 
      string val = GridView1.DataKeys[row.RowIndex].Value.ToString(); 
      url += val; 
     } 
    } 
    Response.Redirect(url); 
} 

今のところ、これは文字列を作成し、Outlookを開きます。場所は私のhttp要求で完璧なので、文字列は正しく構築されますが、Outlookの新しいメールは空です。 bccはありません。

Response.Redirectは私が使用したいものではありません。私もClientScript.RegisterStartupScriptparent.locationで試しましたが、それもうまくいきませんでした。誰にでも解決策がありますか?

答えて

1

mailtoを使用していて、サーバー側の郵送ではないので、あなたがしたいことはjQueryだけで達成できると思います。これにより、サーバーへのラウンドトリップが削減されます。

まず、CheckBoxに電子メールアドレスの値としての属性を与えます。

<asp:CheckBox ID="CheckBox1" runat="server" data-email='<%# Eval("EmailList") %>' /> 

これはHTML形式で表示されます。

<span data-email="[email protected]"><input id="mainContentPane_GridView1_CheckBox1_0" type="checkbox" name="ctl00$mainContentPane$GridView1$ctl02$CheckBox1" /></span> 

属性は入力コントロールではなく周囲のスパンにあることに注意してください。したがって、チェックされた各チェックボックスの親スパンの属性を読み取るjavascript関数を作成できることはわかっています。

<script type="text/javascript"> 
    function emailCheckBoxes() { 
     var url; 

     $('#<%= GridView1.ClientID %> input[type="checkbox"]').each(function() { 
      if ($(this).prop('checked')) { 
       url += $(this).parent().attr('data-email') + ';'; 
      } 
     }); 

     location.href = 'mailto:?bcc=' + url; 
    } 
</script> 
+0

答えは、私が探していたものではありません。私はコードと私の問題をいくつか変更して私の質問を更新しました。しかし、ありがとう。 –

+0

あなたは私と同じことをやっているようですが、その後はC#コードを使っています。まず、bcc電子メールアドレスを ';'で区切ることはありません。したがって、1つの大きなbcc文字列になります。第二に、HTTPリダイレクトを使用してmailtoをトリガーします。これは、コードが実行された後にfirefoxが 'オブジェクト移動 'ページを表示するような、奇妙な結果をもたらす可能性があります。しかし、その奇妙なページの一部は、bccアドレス(Outlook 2016)で新しい電子メールを開きます – VDWWD

+0

私は私のために電子メールを分けるSQLを持っています。間違いなくリダイレ​​クトとmailtoプロキシの問題です。 –

0

私はちょうどばかです。私がしなければならなかったのは、デフォルトのメールアドレスをメールからに変更することでした。Outlook。ここは、とにかく...

を私のユーザーの100%が使用されるアプリケーションで正常に動作します私のコードが終わったところです:グレート

<script type="text/javascript"> 
    function SendMail(arg) { 
     window.location.href = arg; 
    } 
</script> 

<asp:GridView ID="GridView1" DataKeyNames="EmailList" runat="server"> 
    <Columns> 
    <asp:TemplateField> 
     <HeaderTemplate> 
     <asp:Button ID="Button1" OnClick="Button1_Click" Text="&#9993;" runat="server" /> 
     </HeaderTemplate> 
     <ItemTemplate> 
     <asp:CheckBox ID="CheckBox1" runat="server" /> 
     </ItemTemplate> 
    </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

protected void Button1_Click(Object sender, EventArgs e) 
{ 
    string emailList = ""; 
    foreach (GridViewRow row in GridView1.Rows) 
    { 
    CheckBox cb = (CheckBox)row.FindControl("CheckBox1"); 
    if (cb.Checked) 
    { 
     string val = GridView1.DataKeys[row.RowIndex].Value.ToString(); 
     emailList += val; 
    } 
    } 
    ClientScriptManager csm = Page.ClientScript; 
    csm.RegisterClientScriptBlock(GetType(), "SendMail", string.Format("SendMail(\"mailto:?bcc={0}\");", emailList), true); 
} 
関連する問題