ASP. NET CORE DataFormat выполняет действие Edit. - PullRequest
1 голос
/ 21 марта 2020

В моем проекте у меня есть свойства, которые я хотел бы отобразить в долларовом формате. В моем классе он настроен для этого

public class Worker{
    public int Id {get;set;}
    public string Name {get;set;}

    [DisplayFormat(DataFormatString = "{0:C0}", ApplyFormatInEditMode = true)]
    public double Rev {get;set;}

    [DisplayFormat(DataFormatString = "{0:C0}", ApplyFormatInEditMode = true)]
    public double Cost {get;set;}

    [DisplayFormat(DataFormatString = "{0:C0}", ApplyFormatInEditMode = true)]
    public double Profit {get;set;}
}

Это работает и отображается правильно, однако, когда я go на страницу редактирования. Вся информация отображается в этом формате, и мне приходится менять каждое поле со знака доллара на double, или я получаю сообщение об ошибке. Вот скриншот, показывающий. enter image description here

Даже если я хочу изменить одно поле, я должен переписать каждое поле с $ 50 000 до 50000,00. Как я могу это исправить, чтобы в Edit мне не приходилось беспокоиться об исправлении каждого поля, и мой формат знака доллара будет отображаться в Index или Details и так далее? Вот мой контроллер для Edit

    public async Task<IActionResult> Edit(int? id)
    {
        if (id == null)
        {
            return NotFound();
        }

        var worker = await _context.Workers.FindAsync(id);
        if (worker == null)
        {
            return NotFound();
        }
        return View(worker);
    }
    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Edit(int id, [Bind("Id,Rev,Cost,Profit")] Worker worker)
    {
        if (id != worker.Id)
        {
            return NotFound();
        }

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

На данный момент меня не волнует, отображается ли формат валюты в виде edit или просто в виде числа. Я просто не хочу преобразовывать каждое поле из валюты в число, чтобы сохранить обновления в одном свойстве. Как я могу избавиться от этой ошибки? Либо оставляя в этом формате или в числовом формате.

1 Ответ

1 голос
/ 23 марта 2020

Даже если я хочу изменить одно поле, я должен переписать каждое поле с $ 50 000 до 50000,00. Как это исправить, чтобы в «Редактировании» мне не пришлось беспокоиться об исправлении каждого поля, и мой формат знака доллара будет отображаться в «Указателе» или «Подробности» и т. Д.

IMO, вам просто нужно установить ApplyFormatInEditMode=false или удалить его из модели.

public class Worker
{
    public int Id { get; set; }
    public string Name { get; set; }

    [DisplayFormat(DataFormatString = "{0:C0}", ApplyFormatInEditMode = false)]
    public double Rev { get; set; }

    [DisplayFormat(DataFormatString = "{0:C0}", ApplyFormatInEditMode = false)]
    public double Cost { get; set; }

    [DisplayFormat(DataFormatString = "{0:C0}", ApplyFormatInEditMode = false)]
    public double Profit { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...