Кнопка ссылки имеет некоторые проблемы

У меня есть одно приложение ASP.NET, которое включает в себя одно представление сетки. Этот вид сетки содержит 4 столбца шаблонов флажков и 2 столбца шаблонов кнопок ссылок. Если я нажму на первый флажок, то обе кнопки ссылок должны быть включены, в противном случае они должны быть в отключенном режиме. Этот функционал работает нормально. Но моя проблема в том, что во время загрузки формы она проверяет, отмечен ли первый столбец или нет. Если флажок не установлен, кнопки ссылок будут отключены. Но после установки этого флажка он будет включен, но ссылки на перенаправление нет. Мой код показан ниже.

 protected void DGDocuments_ItemDataBound(object sender, DataGridItemEventArgs e)
    {
        if (e.Item.ItemIndex == -1) return;

        BindCheckBox(e.Item, "chkRead");
        BindCheckBox(e.Item, "chkCreate");
        BindCheckBox(e.Item, "chkUpdate");
        BindCheckBox(e.Item, "chkDelete");

        CheckBox chkID = (CheckBox)e.Item.FindControl("chkRead");
        if (!chkID.Checked)
        {
            LinkButton lnkPermission = (LinkButton)e.Item.FindControl("lnkFieldPermssion");
            LinkButton lnkSetRules = (LinkButton)e.Item.FindControl("lnkAddRules");

            lnkPermission.Enabled = false;
            lnkSetRules.Enabled = false;
        }
    }

На странице конструктора:

 <asp:TemplateColumn HeaderText="Read" ItemStyle-HorizontalAlign="Center">
     <ItemTemplate>
         <asp:CheckBox ID="chkRead" runat="server" Text='<%# Eval("Read") %>' onclick="javascript:EnablePermissoin(this,5,6);" />
     </ItemTemplate>
 </asp:TemplateColumn>
 <asp:TemplateColumn HeaderText="Rules" ItemStyle-HorizontalAlign="Center" ItemStyle-Font-Bold="true">
     <ItemTemplate>
         <asp:LinkButton ID="lnkAddRules" Text="Add Rules" runat="server"  CommandName="cmdSetRules"  />
     </ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Field Permission" ItemStyle-HorizontalAlign="Center" ItemStyle-Font-Bold="true">
    <ItemTemplate>
        <asp:LinkButton ID="lnkFieldPermssion" Text="Set" runat="server" CommandName="cmdFieldPermission" />
    </ItemTemplate>
</asp:TemplateColumn>

Джаваскрипт это:

function EnablePermissoin(chkB, cellNumber1, cellNumber2) {
        var IsChecked = chkB.checked;
        if (IsChecked) {

            var cell1 = chkB.parentElement.parentElement.cells[cellNumber1];
            for (i = 0; i < cell1.childNodes.length; i++) {
                if (cell1.childNodes[i].tagName == "A") {
                    cell1.childNodes[i].disabled = false;

                }
            }
            var cell2 = chkB.parentElement.parentElement.cells[cellNumber2];
            for (i = 0; i < cell2.childNodes.length; i++) {
                if (cell2.childNodes[i].tagName == "A") {
                    cell2.childNodes[i].disabled = false;
                }

            }

        }
        else {
            var cell1 = chkB.parentElement.parentElement.cells[cellNumber1];
            for (i = 0; i < cell1.childNodes.length; i++) {
                if (cell1.childNodes[i].tagName == "A") {

                    cell1.childNodes[i].disabled = true;
                }

            }
            var cell2 = chkB.parentElement.parentElement.cells[cellNumber2];
            for (i = 0; i < cell2.childNodes.length; i++) {
                if (cell2.childNodes[i].tagName == "A") {

                    cell2.childNodes[i].disabled = true;
                }
            }
        }
    }

Это код, полученный из исходного кода браузера, без отключения кнопки ссылки при загрузке формы:

<td align="center" style="font-weight:bold;">
    <a id="DGDocuments_ctl23_lnkAddRules" href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;DGDocuments$ctl23$lnkAddRules&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, true))">Add Rules</a>
</td><td align="center" style="font-weight:bold;">
    <a id="DGDocuments_ctl23_lnkFieldPermssion" href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;DGDocuments$ctl23$lnkFieldPermssion&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, true))">Set</a>
</td>

Если я отключу кнопку ссылки при загрузке, это будет код, полученный из источника представления:

<td align="center" style="font-weight:bold;">
    <a id="DGDocuments_ctl23_lnkAddRules" disabled="disabled">Add Rules</a>
</td><td align="center" style="font-weight:bold;">
    <a id="DGDocuments_ctl23_lnkFieldPermssion" disabled="disabled">Set</a>
</td>

Пожалуйста, помогите мне решить эту проблему. Заранее спасибо.


person MAC    schedule 19.10.2010    source источник
comment
Я не вижу, где вы устанавливаете URL-адрес перенаправления на кнопки ссылок.. :)   -  person Genady Sergeev    schedule 19.10.2010
comment
Я установил имя команды для кнопки ссылки. если я нажму на ссылку, она вызовет метод для перенаправления на следующую страницу.   -  person MAC    schedule 19.10.2010


Ответы (2)


Похоже, что когда вы отключаете LinkButton на стороне сервера, он не генерирует обработчик события onclick для тега a. Итак, как только вы активируете LinkButton через JavaScript, он не знает, как отправить ответ. Я бы предложил либо отобразить LinkButton в обычном режиме, а затем отключить его с помощью JavaScript, либо установить для AutoPostback значение True для флажка и включить его на стороне сервера.

person esteuart    schedule 19.10.2010

Вам придется пересмотреть свое решение. LinkButtons просто генерируют тег ‹A› в HTML. Тег ‹A› не может быть отключен, поэтому, когда вы устанавливаете для LinkButton значение Disabled, ASP.NET удаляет HREF из тега, поэтому щелчок по нему ничего не делает. Я должен отметить, что ваш JavaScript для отключения тега ‹A› не работает — он делает тег ‹A› отключенным, но по-прежнему кликабельным.

Чтобы это работало на стороне клиента, вам понадобится функция JavaScript для добавления и удаления HREF из тега ‹A›. Другие варианты включают выполнение всего на стороне сервера, чтобы ASP.NET обрабатывал удаление и добавление HREF или переключение на другой элемент управления, например на обычную кнопку asp:Button, которую можно включать и отключать.

person Jason Berkan    schedule 19.10.2010