-1

ユーザーコントロールを介して構築されたリピーターを備えたaspxwebformsページがあります。各リピーターアイテムにはリンクボタンがあります。私がしたいのは、LinkBut​​ton(ページAのユーザーコントロールのリピーター内)がクリックされると、URLが新しいタブで開かれ、そのLinkBut​​tonの横にある非表示のIDが渡されることです(セキュリティに関するWeb開発のベストプラクティスに従って)可能であれば)新しいタブのaspxページ(ページB)に移動します。 

ページAとページBの両方が同じアプリケーションにあります。

上記の目的は、ユーザーがLinkBut​​tonをクリックして開いたURLから戻った後、検索結果に簡単に戻ることができるようにすることです。

私は、これを行う方法について、標準的なベストプラクティスの方法に近いアイデアを受け入れています。


これまでのところ、私は試しました:

1)クロスページ投稿–これは、IDを渡すためには機能しましたが、新しいタブで開くためには機能しませんでした。

2)PostBackUrlをページBのURLに設定し、OnClientClickでPage.Form.Target = "_ blank"を設定してjavascriptを呼び出し、ユーザーコントロールからの非表示IDをページBのhtml非表示入力の値に設定します。 

3)OnClientClickでwindow.open( "page B url"、 "_newtab")も使用してみました。

  • a) これまでのところ、正しく機能した唯一の方法は、上記の3つの異なる方法のうちの2番目の方法でした。 

    ただし、ページBが新しいタブに読み込まれた後、ページAのPage.Form.Targetを「_blank」に設定する前の状態にリセットする方法がわかりません。

  • b)Page.Form.Targetをリセットするために私が試した方法は、役に立ちませんでした。

    • 1) ページAのPage_Loadでターゲットをリセットします。ここでIsPostBack == true->により、ページBはページAと同じコンテンツでロードされます。

    • 2) ページAのユーザーコントロールのPage_Load->メソッド1と同じ結果でターゲットをリセットする

    • 3)ページAのユーザーコントロールのターゲットをリセットするページAのユーザーコントロールのLinkBut​​tonのOnUnLoad->メソッド1と同じ結果

    • 4)  LinkBut​​tonのOnClientClickを介してjavascriptでターゲットをリセットする->は機能しませんでした

    • 5)ページAのフォームへ の参照を含むページAからのパブリック変数を使用してページBのPage_Loadでターゲットをリセットする
      (クロスページ投稿で実行できるのと同様)->は機能しませんでした。 


次に試すことを考えているのは、次のとおりです。

1)     ページAで別のユーザーコントロールをラップして、ページBのコンテンツをaspパネル(パネルB)に表示します。

2)     ページBのコンテンツを新しいユーザーコントロールページに配置します

3)      aspパネル(パネルA)のページAの検索結果コンテンツをラップします。

4)     新しいユーザーコントロールのリピーターのLinkBut​​tonをクリックすると、パネルAの検索結果のコンテンツが非表示になり、パネルBが表示されます。

5)     ユーザーが検索結果に戻りたい場合は、パネルBのコンテンツの[検索に戻る]リンクボタンをクリックすると、パネルBが非表示になり、パネルBのコンテンツがクリアされ、パネルAが表示されます。再び表示されます。


それがうまくいくかどうかはまだわかりません。

これはそれほど難しいことではないようです。

これは単純な概念であり、Web開発ではかなり一般的な状況だと思います。

ワイリー・コヨーテがロードランナーを捕まえようとしているような気がします。なぜなら、すべてが完全に失敗する、精巧で考え抜かれた計画を思いついたからです。

私は今、「助けて!

4

2 に答える 2

1

次のコードで同じ問題を解決しました。HTMLページでボタンを試してみてくださいGRIDVIEW

 <asp:LinkButton ID="LinkButton1" runat="server" Text="View" CommandArgument='<%# Bind("ref") %>'
   OnClick="LinkButton1_Click" OnClientClick="document.forms[0].target ='_blank';">View</asp:LinkButton>***
于 2014-10-23T09:57:50.377 に答える
0

私は実際にこれを理解しました。

この投稿のマークされた回答、 LinkBut​​tonをクリックしたときに新しいタブを開く方法、およびこの投稿のマークされた回答の組み合わせからわかりました。ハイパーリンクにクリックイベントを追加することはできますか?



ユーザーコントロールのリピーターにある 私のリピーターItemTemplateは、次のようになります。

<asp:HiddenField ID="hfId" runat="server"  
    Value='<%# Eval("Id") %>'/>
<asp:HyperLink ID="myLink" runat="server" 
    Text='<%# Eval("Name") %>' 
    NavigateUrl="/myUrl.aspx" 
    Target="_blank"  />
<asp:Button ID="btnSubmit" runat="server" 
    Text="Submit" 
    OnClick="BtnClick"
    Style="display: none;" />



これはリピーターのItemDataBoundの 私のコードです:

protected void RptrItemDataBound(object sender, RepeaterItemEventArgs e)
{
  if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
  {
    var myId = "";

    var myNameLink = e.Item.FindControl("myLink") as HyperLink;

    if (myNameLink != null)
    {
      var submitButton = e.Item.FindControl("btnSubmit") as Button;

      if (submitButton != null)
      {
        var submitButtonClientId = submitButton.ClientID;

        myNameLink.Attributes.Add("onclick", "onNameClick('" + submitButtonClientId + "')");
      }
    }
  }
}//end RptrItemDataBound



javascriptコード :

<script type="text/javascript">
  function nameClick(buttonId)
  {
    document.getElementById(buttonId).click();
  }
</script>



そしてここにBtnClickC#コードがあります:

protected void BtnClick(object sender, EventArgs e)
{
  var btnSelect = sender as Button;

  if (btnSelect == null)
  {
    return;
  }

  var myListItem = (RepeaterItem)btnSelect.DataItemContainer;

  if (myListItem != null)
  {
    var hfId = myListItem.FindControl("hfId") as HiddenField;

    if (hfId != null)
    {
      var intId = int.Parse(hfId.Value);

      Session["selectedId"] = intId;
    }//end if (hfId != null)
  }//end if (myListItem != null)
}//end btnClick
于 2013-03-25T18:01:54.657 に答える