ASP.Net C # WebForm: добавление LinkButton в GridView - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь поместить следующую ссылку LinkButton в GridView.Обратите внимание на элемент расширения данных LinkButton.

<asp:GridView ID="gvButtons" runat="server" AutoGenerateColumns="False" DataKeyNames="TrainingSwipeID"  
    CssClass="table table-bordered table-hover" ShowFooter="False">

    <Columns>

        <asp:TemplateField HeaderText="QuestionID" SortExpression="TrainingSwipeID">
            <ItemTemplate>
                <asp:LinkButton id="btnExtend" runat="server" 
                    class="open-AddBookDialog btn btn-outline-secondary btn-med" href="#addBookDialog"
                    data-extend='{"TrainingSwipeID":<%# Eval("TrainingSwipeID") %>,"CurrentDate":"<%# Eval("TrainingEnd") %>"}'
                    data-toggle="modal" data-target="#myModal" />
            </ItemTemplate>
        </asp:TemplateField>


        <asp:TemplateField HeaderText="ID" SortExpression="TrainingSwipeID">
            <ItemTemplate>
                <asp:Label id="lblSwipeID" runat="server" Text='<%# Eval("TrainingSwipeID") %>'  />
            </ItemTemplate>
        </asp:TemplateField>


        <asp:TemplateField HeaderText="Date" SortExpression="TrainingEnd">
            <ItemTemplate>
                <asp:Label id="lblExtendDate" runat="server" Text='<%# Eval("TrainingEnd") %>'  />
            </ItemTemplate>
        </asp:TemplateField>

    </Columns>

</asp:GridView>

Проблема заключается в коде в LinkButton

data-extend='{"TrainingSwipeID":<%# Eval("TrainingSwipeID") %>,"CurrentDate":"<%# Eval("TrainingEnd") %>"}'

Когда страница отображается, я получаю следующее в качестве примера дляLinkButton.

<tr>
    <td>
        <a id="gvButtons_btnExtend_0" class="open-AddBookDialog btn btn-outline-secondary btn-med" href="#addBookDialog" data-extend="{&quot;TrainingSwipeID&quot;:&lt;%# Eval(&quot;TrainingSwipeID&quot;) %>,&quot;CurrentDate&quot;:&quot;&lt;%# Eval(&quot;TrainingEnd&quot;) %>&quot;}" data-toggle="modal" data-target="#myModal" href="javascript:__doPostBack(&#39;gvButtons$ctl02$btnExtend&#39;,&#39;&#39;)"></a>
    </td>
    <td>
        <span id="gvButtons_lblSwipeID_0">135</span>
    </td>
    <td>
        <span id="gvButtons_lblExtendDate_0">2/10/2019 9:00:00 AM</span>
    </td>
</tr>

Как получить элемент расширения данных в LinkButton для правильной визуализации?Он должен отображаться так:

data-extend='{"TrainingSwipeID":135,"CurrentDate":"2/10/2019 9:00:00 AM"}'

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:

Вот Javascript, который я использую для открытия модального диалога, когда пользователь нажимает на LinkButton:

<script>
    $(function () {
        $('#myModal').on('show.bs.modal', function (e) {
            var ele = e.relatedTarget;
            var sTrainingSwipeID = $(ele).data('extend').TrainingSwipeID;
            var sCurrentDate = $(ele).data('extend').CurrentDate;

            $("#TrainingSwipeID").val(sTrainingSwipeID);
            $("#CurrentDate").val(sCurrentDate);
        });
    });
</script>

А вот и модальное:

<!-- The Modal -->
<div class="modal fade" id="myModal">
    <div class="modal-dialog">
        <div class="modal-content">
            <!-- Modal Header -->
            <div class="modal-header">
                <h4 class="modal-title">Extend Date</h4>
                <button type="button" class="close" data-dismiss="modal">&times;</button>
            </div>
            <!-- Modal body -->
            <div class="modal-body">
                <asp:HiddenField  ID="TrainingSwipeID" runat="server"></asp:HiddenField>
                <asp:TextBox ID="CurrentDate" runat="server" autocomplete="off"></asp:TextBox>

            </div>
            <!-- Modal footer -->
            <div class="modal-footer">
                <asp:Button ID="btnExtendFromModal" runat="server" Text="Extend" class="btn btn-primary" OnClick="btnExtendDate_Click" UseSubmitBehavior="false" data-dismiss="modal" />
                <button type="btnClose" class="btn btn-outline-secondary btn-med" data-dismiss="modal">Close</button>
            </div>
        </div>
    </div>
</div>

1 Ответ

0 голосов
/ 25 марта 2019

Спасибо @AlexKudryashev, вы смогли помочь мне найти окончательное решение. Похоже, что в ASP.Net есть «ошибка» при возврате одинарных и двойных кавычек в строках (в моем случае это было для Javascript) из кода с серверными элементами управления. Поэтому, наконец, попробовал следующее, которое сработало.

  1. Создайте таблицу данных и получите каждую запрашиваемую строку из базы данных.
  2. Отформатируйте текстовую строку из каждой возвращенной строки из базы данных и поместите ее в строку в таблице данных.
  3. Использовать таблицу данных в качестве источника данных для GridView.
  4. Используйте обычный тег гиперссылки в GridView, не используя runat = "server".

Для справки:

Отформатированная строка из базы данных в коде для вставки в таблицу данных в столбце DataExtendText:

sDataExtendText = "{\"TrainingSwipeID\":" + iTrainingSwipeID + ",\"CurrentDate\":\"" + sNextReviewDateNoFormat + "\"}";

Обычный тег гиперссылки в GridView, получающий данные из столбца DataExtendText в таблице данных:

<a id="btnExtend" class="btn btn-outline-success btn-med" data-extend='<%# Eval("DataExtendText") %>' data-toggle="modal" data-target="#myModal">Extend</a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...