مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

vira1368

عضویت از 1392/02/25

استفاده از DateTime Picker شمسی

  • پنجشنبه 31 فروردین 1396
  • 11:07
تشکر میکنم

سلام دوستان

من یک فرم دارم که تاریخ رو با استفاده از datetime picker بوت استرپ میگیرم، وقتی صفحه post میشه سمت action فیلد تاریخ null میاد، اما اگه به صورت دستی تاریخ رو با اعداد انگلیسی تایپ کنم، برنامه خطا نمیده و فیلد تاریخ سمت سرور پر میشه. فیلد تاریخ رو توی بانک اطلاعاتی از نوع datetime گرفتم.

مشکلم چجوری حل میشه؟

ممنونم

پاسخ های این پرسش

تعداد پاسخ ها : 7 پاسخ
کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • پنجشنبه 31 فروردین 1396
  • 11:16

کد ویو و اکشن را قرار دهید

کاربر سایت

vira1368

عضویت از 1392/02/25

  • پنجشنبه 31 فروردین 1396
  • 11:28

فایل ها رو قرار دادم، ممنون.

یه فایل دیگه هم گذاشتم مربوط به نمایش اطلاعات ذخیره شده هست، لطفا اگر میشه اون رو هم مشاهده کنید، نظرتون رو درباره کد نمایش تاریخ بهم بگین آیا این روش معقول و استاندارد هست یا خیر؟

من تاریخ رو همیشه توی بانک اطلاعاتی میلادی ذخیره میکنم و زمان نمایش به کاربر تبدیل به شمسی میکنم.

فایل های ضمیمه

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • پنجشنبه 31 فروردین 1396
  • 11:34

از طریق ادیتور و کلید کد ضمیمه کنید

امکان دانلود ندارم

کاربر سایت

vira1368

عضویت از 1392/02/25

  • پنجشنبه 31 فروردین 1396
  • 11:37

کد های Action:

// GET: Admin/AddService
        public ActionResult AddService()
        {
            ViewBag.FromCityId = new SelectList(db.City, "Id", "Name");
            ViewBag.ToCityId = new SelectList(db.City, "Id", "Name");
            ViewBag.BusId = new SelectList(db.Bus, "Id", "DriverName");

            return View();
        }

        // POST: Admin/AddService
        [HttpPost]
        public ActionResult AddService(Service service)
        {
            if (ModelState.IsValid)
            {
                int? newId = db.Service.Max(s => (int?)s.Id);
                if (newId == null)
                {
                    service.Id = 1;
                }
                else
                {
                    service.Id = newId.Value + 1;
                }
                PersianCalendar pc = new PersianCalendar();
                service.DepartureDateTime = pc.ToDateTime(
                    service.DepartureDateTime.Year,
                    service.DepartureDateTime.Month,
                    service.DepartureDateTime.Day,
                    service.DepartureDateTime.Hour,
                    service.DepartureDateTime.Minute,
                    service.DepartureDateTime.Second,
                    0);
                db.Service.Add(service);
                try
                {
                    db.SaveChanges();
                    TempData["Message"] = "سرویس با موفقیت ثبت گردید!";
                }
                catch (Exception exception)
                {
                    TempData["Message"] = exception.Message;
                }
            }
            else
            {
                TempData["Message"] = "مدل معتبر نیست.";
            }
            //return View();
            return RedirectToAction("AddService");
        }

کد های View:


@model BusTicketing.Models.Service

@{
    ViewBag.Title = "AddService";
    Layout = "~/Views/Shared/_LayoutAdmin.cshtml";
}

@section Styles{
    <link href="~/Content/MdBootstrapPersianDateTimePicker/jquery.Bootstrap-PersianDateTimePicker.css" rel="stylesheet" />
}

<h2>AddService</h2>

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>Service</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.FromCityId, "FromCityId", htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownList("FromCityId", null, htmlAttributes: new { @class = "form-control" })
                @Html.ValidationMessageFor(model => model.FromCityId, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.ToCityId, "ToCityId", htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownList("ToCityId", null, htmlAttributes: new { @class = "form-control" })
                @Html.ValidationMessageFor(model => model.ToCityId, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.DepartureDateTime, htmlAttributes: new {@class = "control-label col-md-2"})
            <div class="col-md-10">
                <div class="input-group">
                    <div class="input-group-addon" data-mddatetimepicker="true" data-targetselector="#exampleInput1" data-trigger="click" data-enabletimepicker="true">
                        <span class="glyphicon glyphicon-calendar"></span>
                    </div>
                    @Html.EditorFor(model => model.DepartureDateTime, new { htmlAttributes = new { @class = "form-control", id = "exampleInput1", placeholder = "تاریخ به همراه زمان" } })
                </div>
                @Html.ValidationMessageFor(model => model.DepartureDateTime, "", new {@class = "text-danger"})
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.Price, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Price, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Price, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.BusId, "BusId", htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownList("BusId", null, htmlAttributes: new { @class = "form-control" })
                @*@Html.DropDownListFor(model => model.priceModel.ThicknessId, new SelectList(ViewBag.ThicknessId, "Value", "Text"), "----", new { @class = "form-control input-sm" })*@
                @Html.ValidationMessageFor(model => model.BusId, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default"/>
                <strong class="text-danger">@TempData["Message"]</strong>
            </div>
        </div>

    </div>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

@section scripts{
    <script src="~/Scripts/MdBootstrapPersianDateTimePicker/jalaali.js"></script>
    <script src="~/Scripts/MdBootstrapPersianDateTimePicker/jquery.Bootstrap-PersianDateTimePicker.js"></script>
}
کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • پنجشنبه 31 فروردین 1396
  • 11:41

به احتمال زیاد با فرمت تاریخ مشکل داره

صفت زیر را به فیلد در مدل بدید و تست کنید

[DisplayFormat(DataFormatString = "{0:yyyy/MM/dd}", ApplyFormatInEditMode = true)]

کاربر سایت

vira1368

عضویت از 1392/02/25

  • پنجشنبه 31 فروردین 1396
  • 11:47

این روش هم امتحان کردم اما باز هم مقدار null ارسال شد! بعید میدونم از فرمت تاریخ باشه، چون با همین فرمت اگر اعداد انگلیسی وارد بشه هیچ مشکلی نیست، فقط با اعداد فارسی این مقدار null ارسال میشه.

کاربر سایت

vira1368

عضویت از 1392/02/25

  • پنجشنبه 31 فروردین 1396
  • 13:29

تنها راهی که به جواب رسیدم این بود که مجبور شدم نمایش اعداد تقویم رو به انگلیسی تغییر بدم:

$('#exampleInput1').MdPersianDateTimePicker({
            IsGregorian: false,
            EnglishNumber: true
        });

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)