Конвертор сложного типа для привязки к ядру asp. net - PullRequest
0 голосов
/ 02 августа 2020

Я использую Persian Datetime в своем проекте. Я установил библиотеку из nuget, чтобы преобразовать дату.

это моя модель:

public class Patient
    {
        public long Id { get; set; }
        public string FName { get; set; }
        public string LName { get; set; }
        public PersianDateTime BirthDate { get; set; }
}

это мое мнение:

    @model MyProject.Models.Patient
    @{
            Layout = "~/Views/Shared/_Layout.cshtml";
        }
    
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css">
    <script src="~/lib/jquery/dist/jquery.slim.min.js"></script>
    <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
    <link rel="stylesheet" href="~/lib/md.bootstrappersiandatetimepicker/dist/jquery.md.bootstrap.datetimepicker.style.css" />
    
    
    <hr />
    <div class="container card border-dark">
        <div class="col-md-4">
            <form asp-action="Edit">
                <div asp-validation-summary="ModelOnly" class="text-danger"></div>
                <input type="hidden" asp-for="Id" />
                <div class="form-group">
                    <label asp-for="FName" class="control-label"></label>
                    <input asp-for="FName" class="form-control" />
                    <span asp-validation-for="FName" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <label asp-for="LName" class="control-label"></label>
                    <input asp-for="LName" class="form-control" />
                    <span asp-validation-for="LName" class="text-danger"></span>
                </div>
                <div class="input-group">
                    <div class="input-group-prepend">
                        <span class="input-group-text cursor-pointer" id="date3">Icon</span>
                    </div>
                    <input asp-for="BirthDate" id="ff" class="form-control" aria-label="date3" aria-describedby="date3">
                </div>
<div class="form-group">
                <input type="submit" value="Save" class="btn btn-primary" />
            </div>
    </form>
        </div>
    </div>

работает, когда Я открываю страницу, и все поля заполняются, но когда я хочу их отредактировать, поле BirthDate получает неправильное значение, это код в моем контроллере:

public async Task<IActionResult> Edit(long id, [Bind("Id,FName,LName,BirthDate")] Patient patient)
        {
           
            if (id != patient.Id)
            {
                return NotFound();
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(patient);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!PatientExists(patient.Id))
                    {
                        return NotFound();
                    }
                    else
                    {
                        throw;
                    }
                }
                return RedirectToAction(nameof(Index));
            }

            return View(patient);
        }

Я понимаю, что PersianDateTime имеет свойство Date у которых есть только метод get, я подумал, что когда я получаю BirthDate как параметр string, он имеет правильное строковое значение, но когда он собирается получить как PersianDateTime, он имеет неправильное значение. PersianDateTime имеет метод, который parse string и возвращает PersianDateTime, но я хочу знать, как я могу использовать конвертер, который используют все мои страницы, а BirthDate может привязать к модели

...