priyamtheone Ответов: 1

Как добавить bootstrap datetimepicker в ASP.NET заявление?


Я работаю с Visual Studio 2017 и загрузочный 4.5.0. Под главную страницу, Я страницу оплаты, которая содержит текстовое поле txtName, кнопка txtPin TextBox и btnPay. К этому я хочу добавить DateTimePicker. При нажатии кнопки btnPay значения txtName, txtPin и DateTimePicker должны быть сохранены в базе данных.

Чтобы реализовать эту идею, я установил Начальной загрузки.В3.Элемента управления datetimepicker.УСБ 4.17.45 по eonasdan через менеджер пакетов NuGet Visual Studio. После успешной установки я добавил соответствующие ссылки на js и css (как определено здесь) на главную страницу и добавил код на платежную страницу (как определено здесь) чтобы включить DateTimePicker. Однако появляется только текстовое поле DateTimePicker; больше ничего не происходит.

Изображение моей платежной страницы

Я делаю что-нибудь не так? Или это потому, что эта версия DateTimePicker не работает с моей версией Bootstrap? Пожалуйста, помогите мне в решении этого вопроса.

С уважением

Что я уже пробовал:

Главная страница aspx:
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="User.master.cs" Inherits="User" %>

<!DOCTYPE html>

<html>
<head runat="server">
    <!-- Required meta tags -->
    <meta charset="utf-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>

    <!-- JQuery references -->
    <script src="http://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>

    <!-- Bootstrap CSS references -->
    <link href="Content/bootstrap.min.css" rel="stylesheet" />
    <link href="Content/bootstrap-datetimepicker.css" rel="stylesheet" />
    <link href="Content/CustomStyleSheet.css" rel="stylesheet" />

    <!--***** JQuery code *****-->
    <!-- After the DOM is ready to execute Javascript, add a click event to the Cart button. When the button is clicked, the user will be taken to the Cart.aspx page. -->
    <script>
        $(document).ready(function DocumentReady() {
            $("#btnCart").click(function btnCart_Click() {
                window.location.href = "/Cart.aspx";
            });
        });
    </script>
    <!--***** End *****-->

    <title>Responsive Website</title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <!--***** Navigation Bar, Logo, Dropdown Menu *****-->
            <nav class="navbar fixed-top navbar-expand-lg navbar-light bg-light">
                <a class="navbar-brand" href="Default.aspx">
                    <img src="Images/web.png" width="30" height="30" class="d-inline-block align-top" alt="Logo" />
                    Repsonsive Website
                </a>
                <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <div class="collapse navbar-collapse" id="navbarNavDropdown">
                    <ul class="navbar-nav float-right">
                        <li class="nav-item active">
                            <a class="nav-link" href="Default.aspx">Home<span class="sr-only">(current)</span></a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" href="#">About</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" href="#">Contact</a>
                        </li>
                        <li class="nav-item dropdown">
                            <a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                                Products
                            </a>
                            <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
                                <a class="dropdown-item" href="Products.aspx">All Products</a>
                                <div class="dropdown-divider" role="separator"></div>
                                <label class="dropdown-header">Men's</label>
                                <a class="dropdown-item" href="#">Shirts</a>
                                <a class="dropdown-item" href="#">Pants</a>
                                <a class="dropdown-item" href="#">Denims</a>
                                <div class="dropdown-divider" role="separator"></div>
                                <label class="dropdown-header">Women's</label>
                                <a class="dropdown-item" href="#">Tops</a>
                                <a class="dropdown-item" href="#">Leggings</a>
                                <a class="dropdown-item" href="#">Denims</a>
                            </div>
                        </li>
                        <li class="nav-item">
                            <button id="btnCart" type="button" class="btn btn-primary navbar-btn">
                                Cart <span id="CartBadge" class="badge badge-light" runat="server"></span>
                            </button>
                        </li>
                        <li class="nav-item">
                            <asp:Button ID="btnSignIn" runat="server" class="btn btn-light navbar-btn" Text="Sign In" OnClick="btnSignIn_Click" CausesValidation="False" />
                            <asp:Button ID="btnSignOut" runat="server" class="btn btn-light navbar-btn" Text="Sign Out" Visible="false" OnClick="btnSignOut_Click" CausesValidation="False" />
                        </li>
                        <li class="nav-item">
                            <asp:Button ID="btnSignUp" runat="server" class="btn btn-light navbar-btn" Text="Sign Up" OnClick="btnSignUp_Click" CausesValidation="False" />
                        </li>
                    </ul>
                </div>
            </nav>
            <!--***** End *****-->
            <div class="container midcontent">
                <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
                </asp:ContentPlaceHolder>
            </div>
        </div>
        <!--***** Footer *****-->
        <hr />  <!-- Used to provide a separator between middle contents and footer. -->
        <footer>
            <div class="container">
                <div id="BackToTop" runat="server" class="float-right" visible="false"><a href="#">Back to top</a></div>
                <p>&copy; 2020 domainname.com &middot; <a href="Default.aspx">Home</a> &middot; <a href="#">About</a> &middot; <a href="#">Contact</a> &middot; <a href="#">Products</a></p>
            </div>
        </footer>
        <!--***** End *****-->
    </form>
    <!-- Optional JavaScript -->
    <!-- References: jQuery first, then Popper.js, then Bootstrap JS -->
    <script src="Scripts/jquery-3.0.0.min.js"></script>
    <script src="Scripts/umd/popper.min.js"></script>
    <script src="Scripts/moment.min.js"></script>
    <script src="Scripts/bootstrap.min.js"></script>
    <script src="Scripts/bootstrap-datetimepicker.js"></script>
</body>
</html>


Платежная страница aspx:
<%@ Page Title="" Language="C#" MasterPageFile="~/User.master" AutoEventWireup="true" CodeFile="Payment.aspx.cs" Inherits="Payment" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
    <script type="text/javascript">
        // Initialise DateTimePicker.
        $(function () {
                $('#datetimepicker1').datetimepicker();
        });

        // Test if txtPin is not blank, doesn't contain alphanumeric value and contains exactly six digits.
        function Client_ValidatePin(source, arguments) {
            arguments.IsValid = /^[0-9]{6}$/.test(arguments.Value);
        }
    </script>
    <div id="divAlert" role="alert" runat="server">
    </div>
    <div class="row">
        <div class="col-md-9">
            <h4>Payment</h4>
            <hr />
            <div class="form-group row">
                <asp:Label ID="Label1" runat="server" class="col-md-2 col-form-label" Text="Name:"></asp:Label>
                <div class="col-md-7">
                    <asp:TextBox ID="txtName" class="form-control" runat="server" MaxLength="50"></asp:TextBox>
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" class="text-danger" ErrorMessage="Name is required!" ControlToValidate="txtName"></asp:RequiredFieldValidator>
                </div>
            </div>
            <div class="form-group row">
                <asp:Label ID="Label2" runat="server" class="col-md-2 col-form-label" Text="PIN:"></asp:Label>
                <div class="col-md-7">
                    <asp:TextBox ID="txtPin" class="form-control" runat="server" MaxLength="6"></asp:TextBox>
                    <asp:CustomValidator ID="PinValidator" runat="server" ControlToValidate="txtPin" ValidateEmptyText="true" ClientValidationFunction="Client_ValidatePin" OnServerValidate="PinValidator_ServerValidate" class="text-danger" Display="Static" ErrorMessage="A 6-digit number is required!"></asp:CustomValidator>
                </div>
            </div>
            <div class="form-group row">
                <asp:Label ID="Label3" runat="server" class="col-md-2 col-form-label" Text="Date/Time:"></asp:Label>
                <div class="col-md-7">
                    <div class='input-group date' id='datetimepicker1'>
                        <input type='text' class="form-control" />
                        <span class="input-group-addon">
                            <span class="glyphicon glyphicon-calendar"></span>
                        </span>
                    </div>
                </div>
            </div>
            <asp:Button ID="btnPay" runat="server" Text="Make Payment" />
        </div>
    </div>
</asp:Content>


Код платежной страницы-позади:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Payment : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack)
        {
            divAlert.InnerText = string.Empty;
            divAlert.Attributes["class"] = "d-none";
        }
    }

    protected void PinValidator_ServerValidate(object source, ServerValidateEventArgs args)
    {
        try
        {
            // Test if txtPin is not blank, doesn't contain alphanumeric value and contains exactly six digits.
            args.IsValid = System.Text.RegularExpressions.Regex.IsMatch(args.Value, "^[0-9]{6}$");
        }

        catch (Exception ex)
        { args.IsValid = false; }
    }

    protected void btnPay_Click(object sender, EventArgs e)
    {
        if (Page.IsValid)
        {
            // Write code for payment.

            // If payment is successful...
            divAlert.Attributes["class"] = "alert alert-success";
            divAlert.InnerText = "Payment completed successfully.";
        }
    }
}

F-ES Sitecore

Начиная с основ, все ли ваши скрипты загружаются нормально? Проверьте вкладку Сеть инструментов разработки, чтобы убедиться, что ваши js - файлы находятся и загружаются нормально, а не 404ing.

edit: вы загружаете две версии jQuery, это не сработает, вам нужна одна версия, которая поддерживает все, что вы хотите сделать.

priyamtheone

Я проверил сценарии. Все загружаются правильно. Что касается двух версий jQuery, то это опечатка. Проверил обе версии jQuery, применив их отдельно. Но все равно ничего хорошего.

priyamtheone

*** Обновление ***

Я узнал, что eonasdan DateTimePicker предназначен для Bootstrap версии 3. Он не работает с более поздними версиями Bootstrap. Поэтому я перешел на Темпус Доминус Datetimepicker Для, который является обновленным преемником eonasdan DateTimePicker, который работает с Bootstrap 4 или более поздней версией.

Тем не менее, при использовании Tempus Dominus, хотя DateTimePicker появляется сейчас и его функции работают должным образом на странице, никаких значков DateTimePicker или элемента управления календарем не появляется. Смотрите изображения панель даты и временная панель Точки, обведенные красным кружком, находятся там, где должны быть значки.

Поскольку я не смог найти ни одного установочного пакета NuGet для Tempus Dominus, я скачал его moment.min.js, tempusdominus-bootstrap-4.min.js и tempusdominus-ушко-4.мин.в CSS отдельно от URL-адресов, упомянутых в разделе CDNJS эта страница Я добавил их в папки скриптов и контента моего проекта, добавил ссылки на них. moment.min.js, tempusdominus-bootstrap-4.min.js и tempusdominus-ушко-4.мин.в CSS к главному файлу. Затем на странице оплаты я добавил функцию javascript для инициализации DateTimePicker. Тем не менее, значок элемента управления DateTimePicker не виден.

Проблема все еще сохраняется, даже если я использую полные версии moment.js, tempusdominus-bootstrap-4.js и tempusdominus-ушко-4.в CSS.

Что я делаю не так на этот раз?

1 Ответов

Рейтинг:
0

Member 7969814

Пожалуйста, перейдите в простой текстовый режим использования = дата, и он будет работать нормально, если вы хотите использовать только asp.net управление используйте Ajax calendar extender control вот код для обоих

<asp:TextBox ID="txtLrDate" runat="server"  placeholder="LR-Date" CssClass=" text-primary" onkeydown = "return (event.keyCode!=13);" TabIndex="1"></asp:TextBox>
          <ajaxToolkit:MaskedEditExtender ID="MaskedEditExtender2" runat="server" CultureName="en-GB" Mask="99/99/9999" MaskType="Date" PromptCharacter="_" TargetControlID="txtLrDate" />                      
          <ajaxToolkit:CalendarExtender runat="server" TargetControlID="txtLrDate" Format="dd/MM/yyyy" ></ajaxToolkit:CalendarExtender>



Для ввода типа даты ваш формат даты должен быть iso8 гггг-ММ-ДД, и он будет показывать локальный формат даты браузера пользователю


priyamtheone

Привет,

Извините за поздний ответ.

Вы подразумеваете, чтобы избежать этих JavaScript-основанных элементов управления DateTimePicker, случайно доступных в интернете, и полагаться на них ASP.Net контроль? Если так, то я тоже так думаю. После просмотра нескольких статей кажется, что эти элементы управления на основе JavaScript недостаточно согласованы или полностью защищены в разных браузерах. Я думаю, что это разумнее использовать ASP.Net управление текстовым полем с помощью TextMode="дата" или TextMode="время" соответственно.

Кстати, Вы упомянули об управлении Ajax Calendar Extender control. Не могли бы вы поделиться ссылкой на его учебник и скачать?

Member 7969814

Используйте этот учебник https://www.c-sharpcorner.com/UploadFile/2f59d0/use-ajaxcontroltoolkit-calendar-extender-with-Asp-Net/

Вы можете скачать проект на учебник и использовать ajax toolkit dll в вашем проекте он находится в боковой ссылке или папке bin.