C# 下拉列表的PostBackUrl
在asp.net中,按钮可以具有回发url(即通过指定回发url-我过去曾使用过它来截断querystring参数-通过只指定页面url而不指定任何参数)。这是一个超级简单的按钮 有人知道用下拉列表做这件事的最好方法是什么吗?如果我指定AutoPostBack(选择更改时回发),那么修改回发url(即回发到没有querystring参数的页面)似乎不是一个简单的方法C# 下拉列表的PostBackUrl,c#,asp.net,drop-down-menu,postback,C#,Asp.net,Drop Down Menu,Postback,在asp.net中,按钮可以具有回发url(即通过指定回发url-我过去曾使用过它来截断querystring参数-通过只指定页面url而不指定任何参数)。这是一个超级简单的按钮 有人知道用下拉列表做这件事的最好方法是什么吗?如果我指定AutoPostBack(选择更改时回发),那么修改回发url(即回发到没有querystring参数的页面)似乎不是一个简单的方法 我猜也许用javascript做一个自定义回发。。。但是有没有更好的方法?比如我缺少的asp.net按钮中的属性?没有DropDo
我猜也许用javascript做一个自定义回发。。。但是有没有更好的方法?比如我缺少的asp.net按钮中的属性?没有DropDownList属性。您可以使用
响应重定向用户。重定向
方法和使用会话收集
在请求之间保存数据。如果您想直接发布到另一页,可以使用隐藏按钮方法
<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" />
DropDownList没有该属性,但您可以使用一些技巧将此功能添加到页面中。首先,请允许我描述一种情况,说明为什么您可能需要该物业:
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;
}
}
}
名称空间myspace
{
公共部分类EmployeePage:System.Web.UI.Page
{
受保护的无效页面加载(对象发送方、事件参数e)
{
//现在您应该获得正确的url了
//您可以在这里生成它,但我更喜欢使用特殊的方法
//确保此url在我的代码的所有位置都相同
字符串emptyEmpIdPostbackUrl=Utils.GetEmployeePageURL(“”);
//现在调用main方法
Utils.CreatePostbackUrl(这是“SetFilterUrl”,emptyEmpIdPostbackUrl,
新列表{ddlpiltercompany,ddlpilterdepartment,ddlpilterowner,
ddlpiltertype,ddlpilterdiscared,ddlpilterchangedate});
如果(!IsPostBack)
{
...
}
}
...
}
公共静态类Utils
{
//页面-您的gridview页面
//名称-一些自定义名称,以确保不同的回发将彼此独立工作
//url-员工id为空的url
//控件-要为其创建回发url的网络控件列表(我在自己的页面上有6个下拉列表)
公共静态void CreatePostbackUrl(页面、字符串名称、字符串url、列表控件)
{
//使用postbackurl创建隐藏按钮
按钮btn=新按钮();
btn.ID=名称;
btn.PostBackUrl=url;
添加(“样式”,“显示:无;”);
page.Form.Controls.Add(btn);
//注册将模拟单击隐藏按钮的javascript
page.ClientScript.RegisterClientScriptBlock(page.GetType(),name+“Script”,
函数“+name+”(){”+
“var btn=document.getElementById(“+btn.ClientID+”)+
“if(btn)btn.click();}”,false);
//并将此脚本链接到列表中的每个下拉列表
foreach(控件中的WebControl ctrl)
{
字符串attrName=“”;
如果(ctrl为下拉列表)
attrName=“onchange”;
如果(attrName!=“”)
ctrl.Attributes.Add(attrName,name+“()”);
}
}
公共静态字符串GetEmployeePageURL(字符串empId)
{
返回“emp.aspx”+
“?empid=“+empid;
}
}
}
在这些操作之后,您将获得一个隐藏按钮和一组网络控件的页面,这些控件将链接到此按钮并共享其PostBackUrl属性。也许有更好的方法,您想实现什么?更好/最好的模型是像最初的ASP.NET webforms模型那样取消完整的回发。当然,您应该使用AJAX/JQuery来获得您想要的东西