Непонятное решение в конце сообщения
Используя страницу asp.net с кодом C #, я успешно создал и заполнил DropDownList.
Что бы я хотелсделать это захватить новое значение, выбранное из выпадающего списка (предпочтительно с помощью обратной передачи в мой код).Затем кодовое поле может обновлять другие элементы на странице, основываясь на этом недавно выбранном значении раскрывающегося списка.
Моя первая попытка состояла в использовании
<asp:DropDownList ID="myDDL" runat="server" AutoPostBack="true" OnSelectedIndexChanged="foo"></asp:DropDownList>
с методом C #
public void foo(object sender, EventArgs e)
{
DropDownList ddl = sender as DropDownList;
string myValue = "";
if (ddl != null)
{
myValue = ddl.SelectedValue;
// Do some stuff
}
}
Это не сработало.Когда выбранный индекс был изменен, он просто перезагружал страницу, но флаг IsPostBack всегда был ложным.
Поэтому я перебрал SO и попробовал несколько различных тактик.Совсем недавно я попытался зарегистрировать событие onChange на стороне клиента в кодовой области и отключил AutoPostBack.
на странице ASP.Net:
<asp:DropDownList ID="myDDL" runat="server" AutoPostBack="false"></asp:DropDownList>
в кодовой области:
myDDL.Attributes.Add("onChange", "doSomeStuff(this);"); // Done on databind.
Я добавил клиентский javascript для вызова функции __doPostBack страницы
<script language="javascript" type="text/javascript">
function doSomeStuff(ddl) {
var ddlVals = document.getElementById(ddl.id);
__doPostBack(ddlVals, '');
}
</script>
Это также не удалось, хотя я думал, что это происходит где-то, когда я вижу, что javascript выполняется правильно.
Однако, заглядывая в код, он все еще не работает.Когда я ставлю точку останова в Page_Load, IsPostBack ложно!Но это должен быть постбэк !?Он был отправлен обратно с использованием __doPostBack и (отдельно) автоматически с AutoPostBack = "true"
Так что я копал глубже.
В соответствии с этой статьей MSDN (http://msdn.microsoft.com/en-us/library/ms178141(v=VS.85).aspx) на основе результатов загрузки страницы я выполняю «передачу на сервер», а не желаемую обратную передачу (IsPostBack имеет значение false, PreviousPage, как и ожидалось, является тем жестраница, которая должна отправлять сообщения назад, IsCallback - false, а IsCrossPagePosting - false).
Что может быть использовано для кражи AutoPostBack и __doPostBack, чтобы он выглядел и действовал как "Передача на сервер "?
Что можно установить / проверить на родительском элементе управления / page, чтобы убедиться, что он разрешает обратную передачу?
РЕДАКТИРОВАТЬ:
Page_Load выглядит примерно так:
private SpecialDataObject _someData;
private string foobar;
public void Page_Load(object sender, EventArgs e)
{
//set some variables.
this.foobar = "blah";
LoadSomeUnrelatedData();
if (!IsPostBack)
{
if (_someData == null)
{
LoadDataWithoutBinding();
}
BindMyData();
}
}
С точкой останова на //set some variables
Page.IsPostBack всегда ложен, даже после AutoPostBack.
РЕДАКТИРОВАТЬ 2:
Ответ был в передаче сервера. В удаленном элементе управления, загруженном с главной страницы, URL проверяется и перенаправляется до попадания на страницу, что фактически сводит на нет мою обратную передачу. Я не видел егораньше, потому чтоЯ добавил точки останова только на целевой странице.