首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >下拉列表的PostBackUrl

下拉列表的PostBackUrl
EN

Stack Overflow用户
提问于 2011-09-09 21:09:14
回答 3查看 2.1K关注 0票数 2

在asp.net中,按钮可以有回发PostBackUrl (例如,通过指定一个url --我过去曾用它来截断查询字符串参数--只需指定页面url而不带任何参数)。只需一个按钮,这就非常简单了。

有没有人知道使用下拉列表最好的方法是什么?如果我指定AutoPostBack (当选择更改时回发),似乎没有一种简单的方法来修改回发url (即不带查询字符串参数的回发到页面)。

我猜可能是使用javascript进行自定义回发...但是,有没有更好的方法--像asp.net按钮中那样的属性,而我没有呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-09 21:17:45

不,DropDownList没有属性。您可以使用Response.Redirect方法重定向用户,并使用Session collection在请求之间持久化数据。

票数 2
EN

Stack Overflow用户

发布于 2015-01-28 18:21:40

DropDownList没有该属性,但您可以使用一些技巧将此功能添加到页面中。首先,让我描述一种情况,为什么这个属性对您来说是必要的:

  1. 你有一个从数据库中填充了网格视图的页面。例如,您公司的员工列表。这些字段是id、name、surname、jobname等。
  2. 您可以从项目的其他页面打开此页面,然后在某些情况下,您必须在网格视图中选择一个员工。因此,您需要一个带有该员工id的参数,可以将其传递给网格视图页面。当然,出于这个目的,您可以使用会话变量,但在某些情况下,它们不被接受。例如,使用back按钮时,会话变量就不是很好。您可以多次按back,从浏览器历史记录返回到所选员工的gridview页面,但会话变量将包含最后一个集合id,而不是现在打开的!现在假设您有一个delete按钮,它通过会话id来执行它的工作。你看到一个网格视图行作为被选中的行,但是删除了一个完全不同的行。
  3. 因此,将参数传递给其他页面的最好方法是查询字符串。您可以轻松地阅读它,并确保后退按钮不会破坏它们。
  4. 现在,当您在页面上并单击网格视图行时,您必须修改您的url以使url id参数与所选行匹配。这可以通过在每一行中插入链接按钮来完成,这些链接按钮具有右填充的PostbackUrl属性。你单击行中的一个链接按钮,该链接按钮包含具有正确行id的回发url,回发按你想要的方式进行,所选行和url都是ok的。
  5. 现在想象你处于更复杂的情况。你的页面上有一个下拉列表,它应该过滤网格视图中的员工列表。例如,按部门。因此,您必须重新填充网格视图并去掉url中的id,因为在重新填充之后,您不需要网格视图有任何选定的行。但是你不能这样做,下拉列表没有这个神奇的属性--

因此,以下是解决方案:

代码语言:javascript
复制
namespace myspace
{
    public partial class EmployeePage : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //now you should get the correct url
            //you can generate it right here but i prefer to use a special method to
            //ensure that this url will be the same in all places of my code
            string emptyEmpIdPostbackUrl = Utils.GetEmployeePageURL("");

            //now call the main method
            Utils.CreatePostbackUrl(this, "SetFilterUrl", emptyEmpIdPostbackUrl,
                new List<WebControl> { ddlFilterCompany, ddlFilterDepartment, ddlFilterOwner, 
                    ddlFilterType, ddlFilterDiscarded, ddlFilterChangeDate });

            if (!IsPostBack)
            {
                ...
            }
       }

       ...

    }   
    public static class Utils
    {
        //page - your gridview page
        //name - some custom name to ensure that different postbacks will work independently from each other
        //url - the url with empty employee id
        //controls - list of webcontrols for which you want to create postback url (i've got 6 dropdownlists on my own page)
        public static void CreatePostbackUrl(Page page, string name, string url, List<WebControl> controls)
        {
            //create a hidden button with your postbackurl
            Button btn = new Button();
            btn.ID = name;
            btn.PostBackUrl = url;
            btn.Attributes.Add("style", "display: none;");
            page.Form.Controls.Add(btn);

            //register javascript that will simulate click on the hidden button
            page.ClientScript.RegisterClientScriptBlock(page.GetType(), name + "Script",
                "<script type=\"text/javascript\"> function " + name + "() {" +
                "var btn = document.getElementById('" + btn.ClientID + "'); " +
                "if (btn) btn.click();} </script>", false);

            //and link this script to each dropdownlist in the list
            foreach (WebControl ctrl in controls)
            {
                string attrName = "";

                if (ctrl is DropDownList)
                    attrName = "onchange";

                if (attrName != "")
                    ctrl.Attributes.Add(attrName, name + "()");
            }

        }

        public static string GetEmployeePageURL(string empId)
        {
            return "emp.aspx" +
                "?empid=" + empId;
        }

    }
}

完成这些操作后,您将获得一个带有隐藏按钮的页面和一堆将链接到此按钮并共享其PostBackUrl属性的get控件。

票数 1
EN

Stack Overflow用户

发布于 2014-07-08 08:02:58

如果您想要直接发布到另一个页面,可以尝试使用隐藏按钮方法

代码语言:javascript
复制
<asp:DropDownList ID="lstMyDropDown" runat="server"  ClientIDMode="Static" onchange="javascript:$get('btnHidden').click(); ">
    <asp:ListItem Value="0" Text="Some Value 1" />
    <asp:ListItem Value="1" Text="Some Value 2" />
</asp:DropDownList>
<asp:Button ID="btnHidden" runat="server" ClientIDMode="Static" PostBackUrl="~/myProcessingPage.aspx" OnClientClick="javascript:if($get('lstPrinterModel').selectedIndex < 1){return false;}" style="display:none"  />
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7362092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档