Javascript 使用弹出窗口从脚本中获取值

Javascript 使用弹出窗口从脚本中获取值,javascript,c#,gridview,Javascript,C#,Gridview,我需要一个弹出窗口中gridview的项目详细信息。当我在gridview上单击detail时,我从行中获取项目 这是我的网格的一部分: <asp:GridView ID="gvwProdProv" runat="server" CssClass="mGrid" AutoGenerateColumns="false" PagerStyle-CssClass="pgr" AlternatingRowStyle-CssClass="alt" Font-Size="Smaller

我需要一个弹出窗口中gridview的项目详细信息。当我在gridview上单击detail时,我从行中获取项目

这是我的网格的一部分:

<asp:GridView ID="gvwProdProv" runat="server" CssClass="mGrid" 
   AutoGenerateColumns="false" PagerStyle-CssClass="pgr" 
   AlternatingRowStyle-CssClass="alt" Font-Size="Smaller" >
   <Columns>
     <asp:TemplateField HeaderText="CLIENTE">
       <ItemTemplate>
         <asp:Label ID = "lblSAC_CliCod" runat="server" Text='<%# Eval("cliente_Codigo") %>'></asp:Label>
       </ItemTemplate>
     </asp:TemplateField>
     <asp:TemplateField HeaderText="COD. CAJA">
       <ItemTemplate>
         <asp:Label ID = "lblSAC_CajCod" runat="server" Text='<%# Eval("caja_Codigo") %>'></asp:Label>
       </ItemTemplate>
     </asp:TemplateField>
     <asp:TemplateField HeaderText="NUM">
        ...
        ...
     <asp:TemplateField>
       <ItemTemplate>
         <asp:HyperLink ID="lnkView" Text="Detalle" NavigateUrl="javascript:;" runat="server" />
       </ItemTemplate>
     </asp:TemplateField>
   </Columns>
</asp:GridView>

...
...
我正在使用此脚本将值发送到其他Web表单:

<script type="text/javascript">
  $(function () {
    $("[id*=lnkView]").click(function () {
      var rowIndex = $(this).closest("tr")[0].rowIndex;
      window.open("Detalle.aspx?rowIndex=" + rowIndex, "Popup", "width=700,height=200");
    });
  });
</script>

$(函数(){
$(“[id*=lnkView]”。单击(函数(){
var rowIndex=$(this).closest(“tr”)[0].rowIndex;
window.open(“Detalle.aspx?rowIndex=“+rowIndex”,弹出窗口”,“宽度=700,高度=200”);
});
});
详细信息显示在webform details中,我这里有脚本:

<script type="text/javascript">
  $(function () {
    if (window.opener != null && !window.opener.closed) {
      var rowIndex = window.location.href.split("?")[1].split("=")[1];
      var parent = $(window.opener.document).contents();
      var row = parent.find("[id*=gvwProdProv]").find("tr").eq(rowIndex);
      $("#cliente_codigo").html(row.find("td").eq(0).html());
      $("#caja_codigo").html(row.find("td").eq(1).html());
      $("#caja_numero").html(row.find("td").eq(2).html());
    }
  });
</script>

$(函数(){
if(window.opener!=null&&!window.opener.closed){
var rowIndex=window.location.href.split(“?”[1]。split(“=”[1];
var parent=$(window.opener.document).contents();
var row=parent.find(“[id*=gvwProdProv]”)。find(“tr”).eq(rowIndex);
$(“#cliente_codigo”).html(row.find(“td”).eq(0.html());
$(“#caja_codigo”).html(row.find(“td”).eq(1.html());
$(“#caja_numero”).html(row.find(“td”).eq(2.html());
}
});
我可以获得所选的值:

<div>
  <u>Details</u>
  <br />
  <br />
  <b>Cliente:</b> <span id="cliente_codigo"></span>
  <br />
  <b>Codigo Caja:</b> <span id="caja_codigo"></span>
  <br />
  <b>Numero Caja:</b> <span id="caja_numero"></span>
</div>

细节


客户:
Codigo Caja:
数字:
问题是我无法在变量中获取该值,以执行存储过程,并在gridview详细信息中显示详细信息


如何获取它们?

根据您的评论,您的想法似乎更像是传统的应用程序。然而,web应用程序将在无状态流下蓬勃发展。这是Web表单的主要缺点,它将状态指定给原本是无状态的东西

我不完全确定你的申请目标。。。但是,我假设第二种形式可以通过以下方法轻松接收值:

$('.Grid-Button').click(function () {
     // Logic to obtain value on Grid 
     window.open("Detail.aspx?index=1");
});
JavaScript将被调整,但在
PageLoad
中的新页面上,您只需执行以下操作:

var index = Request.QueryString["Index"];
这将提供
字符串
1
。因此,在这一点上,您可以随意使用数据,但听起来您的结构更像:

public void PageLoad(object sender, EventArgs e)
{
     var index = Request.QueryString["Index"];
     if(!string.IsNullOrEmpty)
     {
          // Open database to build detail about Product.
     }
}
我相信这就是你想要的。最终,您可能希望研究使用单个页面、Web服务,甚至将当前的方法转换为Ajax。这样你就没有弹出窗口了,因为有些人有弹出窗口拦截器,这对大多数用户来说也是很烦人的

希望这能有所帮助。

谢谢Greg, 你说得对,发送值并不复杂,但我发送和检索值的方式并不是最好的。 无论如何,我在gridview中用超链接发送它们,如下所示:

> <asp:TemplateField>
     <ItemTemplate>
          <asp:HyperLink ID="lnkView" Text="Detalle" runat="server" 
             NavigateUrl='<%# "Detalle.aspx?cliCod=" + Eval("cliente_Codigo").ToString() 
                         + "&cajCod=" + Eval("caja_Codigo").ToString() 
                         + "&cajNum=" + Eval("caja_Numero")
                         %>'/>
     </ItemTemplate>
  </asp:TemplateField>

你能说得更具体一点吗,你的网格有吗?谢谢Greg,第一个gridview节目。当您单击第一个窗口上的“详细信息”单元时,第二个窗口必须显示项目详细信息。使用脚本,我可以获取值,但值是跨域的,我无法为第二个gridview的查询获取它们。我希望说得更具体一些。您是否使用“回发”来填充这些跨度?因此,用户处于网格中,他们单击一个按钮,它将显示有关所选内容的更多信息?否,脚本将创建一个窗口。打开并将值发送到第二个网络表单。这是脚本:函数(){$(“[id*=lnkView]”)。单击(函数(){var rowIndex=$(This)。最近的(“tr”)[0]。rowIndex;window.open(“Detalle.aspx?rowIndex=“+rowIndex”,Popup”,“width=700,height=200”);});。。。。。。。。。。。。我可以得到值,但我不能使用它们。谢谢格雷格。我这样做了,但这是我的问题,我无法检索这些值,因为我以以下方式发送它们:$(函数(){$(“[id*=lnkView]”)。单击(函数(){var rowIndex=$(this)。最近的(“tr”)[0]。rowIndex;window.open(“Detalle.aspx?rowIndex=“+rowIndex”,Popup”,“width=700,height=200”); }); }); 你是否像我建议的那样请求查询字符串?谢谢Greg,我发送它们的方式和我想要检索它们的方式不是最好的。无论如何,我在gridview中用超链接发送它们,如下所示:然后检索它们:string clienteCodigo=Request.QueryString[“cliCod”]。。。谢谢!!
> string clienteCodigo = Request.QueryString["cliCod"];
string cajaCodigo = Request.QueryString["cajCod"];
string cajaNumero = Request.QueryString["cajNum"];