【问题标题】:Dynamic postbackurl动态回传网址
【发布时间】:2014-01-21 04:32:23
【问题描述】:

在 asp 中调用模态时遇到问题

我需要根据在下拉列表中选择的内容从后面的代码中设置 linkbutton4 的 postbackurl!我已经尝试将 postbackurl directlty 放在它工作的链接按钮标签上,但是当我从它背后的代码更改它时,顺便说一句,我在单击链接按钮时更改它。

链接按钮的代码:

 protected void LinkButton4_Click(object sender, EventArgs e)
          { 
              var a = (Control)sender;
              GridViewRow row = (GridViewRow)a.NamingContainer;
              string b = row.Cells[0].Text;
              Session["C"] = b;
              DropDownList ddl  =(DropDownList)row.Cells[7].FindControl("DropDownList1");
              Session["D"] = ddl.SelectedItem.Text;
              LinkButton lb = (LinkButton)row.Cells[7].FindControl("LinkButton4");
              if (Session["D"].ToString() == "Upload")
              {
                  lb.PostBackUrl = "preprod_design.aspx#edit";
              //    Upload();
              }
              if (Session["D"].ToString() == "Download")
              {
                  Download();
              }
             infogridbind();
          }

这是 aspx 的代码:

<asp:GridView ID="GridView2" runat="server" ondatabound="GridView2_DataBound" 
                     onrowdatabound="GridView2_RowDataBound" 
                     onrowcreated="GridView2_RowCreated" 
                     onselectedindexchanged="GridView2_SelectedIndexChanged" 
                     onrowcommand="GridView2_RowCommand" AutoGenerateColumns="False">
                  <Columns>
                   <asp:BoundField DataField="SizeSetID" SortExpression="SizeSetID"/>
                   <asp:BoundField DataField="Revision No." SortExpression="RevisionNo" HeaderText = "Revision No."/>
                   <asp:TemplateField HeaderText ="Image">
                  <ItemTemplate>
                  <asp:Image ID="Image2" runat="server" onError = "this.style.display = 'none';" ImageUrl='<%#"~/ClientPoImage.ashx?autoId="+Eval("[SizeSetID]")%>' Width="50px" Height="40px"/>
                  </ItemTemplate>
                  </asp:TemplateField>
                   <asp:BoundField DataField="Size Name" SortExpression="SizeName" HeaderText = "Size Name"/>
                   <asp:BoundField DataField="Quantity Requested" SortExpression="QuantityRequested" HeaderText ="Quantity Requested"/>
                   <asp:BoundField DataField="Quantity Received" SortExpression="QuantityReceived" HeaderText="Quantity Received"/>
                   <asp:BoundField DataField="Balance" SortExpression="Balance" HeaderText="Balance"/>
                      <asp:TemplateField HeaderText="Action">      
                  <ItemTemplate >
                      <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true">
                          <asp:ListItem>Upload</asp:ListItem>
                          <asp:ListItem>Download</asp:ListItem>
                          <asp:ListItem>Edit</asp:ListItem>
                          <asp:ListItem>Delete</asp:ListItem>
                          <asp:ListItem>Request</asp:ListItem>
                          <asp:ListItem>Receive</asp:ListItem>
                      </asp:DropDownList>
                        <asp:LinkButton ID="LinkButton4" runat="server" onclick="LinkButton4_Click">GO</asp:LinkButton>
                  </ItemTemplate>
                  </asp:TemplateField>
                  </Columns>
                 </asp:GridView>

【问题讨论】:

  • 你把下拉列表放在gridview的模板字段里了吗?
  • @AmarnathBalasubramanian 是的。
  • 完全发布您的代码,我的意思是网格代码以及加载值
  • 我建议复制和粘贴代码而不是使用图像。如果我们改正的话,这样写会更容易。
  • 我已经编辑过了。

标签: c# asp.net .net


【解决方案1】:

您可以像这样在DropDownList.SelectedIndexChanged 事件中将PostBackUrl 更改为LinkButton

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
    var ddl = (DropDownList)sender;
    var row = (GridViewRow)(ddl.NamingContainer);
    var lb = (LinkButton)row.FindControl("LinkButton4");

    if (ddl.SelectedValue == "Upload")
    {
        lb.PostBackUrl = "preprod_design.aspx#edit";
    }
    if (ddl.SelectedValue == "Download")
    {
        ....
    }
}    

你也需要像这样更改标记

....
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true"
 onselectedindexchanged="DropDownList1_SelectedIndexChanged" >
....

【讨论】:

  • 我需要按钮来触发事件。
  • @Vince,如果在我的回答中只为链接按钮设置回发网址,我不会更改click 事件的代码,除了将设置回发网址移动到 selectindexchange 事件
  • @Vince 可能你需要设置 PostbackUrl 如果选择的值不是“上传”则为空字符串
【解决方案2】:

从下拉列表中删除AutoPostBack="True",并在页面标题&lt;%@ Page Title="data"... EnableEventValidation="false" %&gt;中 之后你只需点击链接按钮的事件,然后

   GridViewRow gr = (GridViewRow)(((LinkButton)sender).NamingContainer);     

   DropDownList ddl = (DropDownList)gr.FindControl("DropDownList1");
   If(ddl.SelectedValue =="Upload")  // or u can use ddl.SelectedItem.Text
   {
      //Upload();
   }
   else if(ddl.SelectedValue == "Download")
   {
     //Download();
   }

【讨论】:

  • 试试这个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-29
  • 2021-04-27
  • 2013-08-17
  • 2012-03-15
  • 2011-01-10
  • 2012-04-17
  • 1970-01-01
相关资源
最近更新 更多