Для DropDownList этого свойства нет, но вы можете сделать несколько трюков, чтобы добавить эту функцию на свои страницы.Прежде всего позвольте мне описать ситуацию, почему вам может понадобиться это свойство:
- У вас есть страница с сеткой, заполненной из базы данных.Например, список сотрудников вашей компании.Поля: id, имя, фамилия, имя работы и т. Д.
- Вы можете открыть эту страницу с других страниц вашего проекта, а затем в некоторых случаях вам нужно выбрать одного из ваших сотрудников в сетке.Поэтому вам нужен параметр с идентификатором этого сотрудника, который вы можете передать на страницу gridview.
- Конечно, для этих целей вы можете использовать переменные сеанса, но в некоторых случаях они не принимаются.Например, переменные сессии не очень хороши с кнопкой возврата.Вы можете многократно нажимать назад, возвращаться на страницу сетки в истории браузера с выбранным сотрудником, но переменная сеанса будет содержать последний установленный идентификатор, а не открытый сейчас!А теперь представьте, что у вас есть кнопка удаления, которая выполняет свою работу по идентификатору сеанса.Вы видите одну строку сетки в качестве выбранной, но удаляете совершенно другую строку.
- Таким образом, лучший способ передачи параметров на другие страницы - это строка запроса.Вы можете прочитать его с легкостью и быть уверенным, что кнопка «Назад» не уничтожит их.
- Теперь, когда вы находитесь на странице и щелкаете по строкам сетки, вам нужно изменить ваш URL, чтобы соответствовать параметру url id.выбранная строка.Это можно сделать с помощью кнопок ссылок, вставленных в каждую строку с заполненным справа свойством PostbackUrl.Вы нажимаете кнопку ссылки в строке, кнопка ссылки содержит postbackurl с правильным идентификатором строки, postback идет так, как вы хотите, и с выбранной строкой и URL-адресом все в порядке.
- А теперь представьте, что вы находитесь вболее сложная ситуация.У вас есть выпадающий список на вашей странице, который должен фильтровать список сотрудников в вашем gridview.Например по отделам.Таким образом, вы должны заново заполнить сетку и избавиться от идентификатора в URL, потому что после добавления вам не нужно, чтобы сетка имела какие-либо выбранные строки.Но вы не можете этого сделать, выпадающий список не имеет этого магического свойства ...
Итак, вот решение:
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.