Не могу присвоить значения переменной в пользовательском элементе управления на обратной передаче ajax ... или что-то в этом роде! - PullRequest
0 голосов
/ 17 июня 2010

У меня есть простой пользовательский элемент управления, который переключается между видимостью нескольких изображений в зависимости от UserId.Когда страница загружается в первый раз, ID пользователя назначается правильно (я отлаживаю).Однако на странице есть две другие кнопки для фильтрации по типу пользователей, которые выполняют свои функции через Ajax (не инструментарий, а обычный javascript ajax)

Когда нажата одна из этих кнопок,пользовательский элемент управления не может получить идентификатор пользователя, он всегда отображается как ноль.О, кстати, usercontrol находится в DataRepeater, так что это происходит для каждого пользователя ... все время ... или это идея.У меня есть несколько других подобных страниц (ни на одной из них нет ajax), и у пользовательского элемента управления нет никаких проблем.

Мой управляющий код пользователя:

открытый частичный класс ucAuthorityBadges: BaseUserControl {

    protected void Page_Load(object sender, EventArgs e)
    {
            if (UserId > 0 && UOBJ.GroupId > 0)
            {
                DataSet DS = new DataSet();
                DS = huDataAccessLayer.dbTools.GetUserAuthority(UserId);

                if (!utils.isDataSetEmpty(DS))
                {
                    imgTeamBadge.Visible = Convert.ToBoolean(DS.Tables[0].Rows[0]["isTeam"]);
                    imgDoctorBadge.Visible = Convert.ToBoolean(DS.Tables[0].Rows[0]["isDoctor"]);
                    imgAdminBadge.Visible = Convert.ToBoolean(DS.Tables[0].Rows[0]["isAdmin"]);
                    imgVolunteerBadge.Visible = Convert.ToBoolean(DS.Tables[0].Rows[0]["isVolunteer"]);
                    imgBloggerBadge.Visible = Convert.ToBoolean(DS.Tables[0].Rows[0]["isBlogger"]);
                }
            }
      }
}

А вот повторитель данных выглядит примерно так:

<div class="profileContainer">
<asp:HyperLink Enabled='<%# Eval("isActive") %>' ID="profileName_link" runat="server" Text='<%# Eval("Username") %>' NavigateUrl='<%# "/Profile/" + Eval("Username") %>'></asp:HyperLink>
<img id="friend_image" runat="server" src="/css/images/icons/friend.gif" alt="friend" title="Friend" visible='<%# Convert.ToBoolean(Eval("isFriend")) %>' style="vertical-align:middle" /> 
<ucAB:AuthorityBadges ID="ucAuthBadge" runat="server" UserId='<%# Convert.ToInt32(Eval("UserId")) %>' />
<%# Eval("UserId") %>
<asp:Label ID="status_label1" Text=" · Friend Request Pending" style="font-size:small;" Visible='<%# Convert.ToBoolean(Eval("isFriendReqPending")) %>' runat="server" Font-Bold="false"></asp:Label>
 </div>

Здесь, сразу после строки userControl, я печатаю идентификатор пользователя только для того, чтобы убедиться, что он действителен (<<# # Eval ("UserId")%> и идентификаторы пользователя тоже действительны. Я не понимаю, почему пользовательский элемент управления не может выбратьэто на постбэк ajax?

Любой намек на это будет действительно здорово,

Большое спасибо!

1 Ответ

2 голосов
/ 17 июня 2010

Я думаю, что проблема здесь в том, что ваш исполняемый код фактически находится в событии Page_Load, которое происходит до того, как повторитель является DataBound. Решением этой проблемы будет размещение вашего кода, который в данный момент находится в Page_Load, в другом публичном методе, а затем в событии ItemDataBound вам нужно найти свой элемент управления и вручную вызвать публичный метод с необходимыми параметрами. Таким образом, вы заполните все необходимые поля после инициализации элемента управления.

Надеюсь, это поможет.

...