. NET MVC Просмотр значения ввода формы, не принимая пользовательский ввод - PullRequest
0 голосов
/ 29 января 2020

Я создаю проект. NET MVC, и у меня возникла ситуация, когда форма Создать для модели не принимает ввод пользователя и по-прежнему отправляет 0, даже когда я ввожу другое значение. Как вы можете видеть ниже, поле не может принимать значение 0, поэтому это делает модель недействительной.

Соответствующее поле модели:

public class Inventory
    {
        [Key]
        [Display(Name = "Inventory ID")]
        public int InventoryID { get; set; }
        [Required]
        [Range(1, int.MaxValue, ErrorMessage = "Please enter a value larger than 0")]
        public int QTY { get; set; }

GET и POST Controller:

// GET: Inventories/Create
        public IActionResult Create()
        {
            ViewData["BinID"] = new SelectList(_context.Bins, "BinID", "BinName");
            ViewData["ProductID"] = new SelectList(_context.Products, "ProductID", "ProductDescription");
            return View();
        }

        // POST: Inventories/Create
        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Create([Bind("InventoryID,Quantity,BinID,ProductID")] Inventory inventory)
        {
            if (ModelState.IsValid)
            {
                _context.Add(inventory);
                try
                {
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateException ex)
                {
                    // send message to view
                    ModelState.AddModelError(string.Empty, "An inventory for this bin and product already exists");
                    ViewData["BinID"] = new SelectList(_context.Bins, "BinID", "BinName", inventory.BinID);
                    ViewData["ProductID"] = new SelectList(_context.Products, "ProductID", "ProductDescription", inventory.ProductID);
                    return View(inventory);
                }
                return RedirectToAction(nameof(Index));
            }
            ViewData["BinID"] = new SelectList(_context.Bins, "BinID", "BinName", inventory.BinID);
            ViewData["ProductID"] = new SelectList(_context.Products, "ProductID", "ProductDescription", inventory.ProductID);
            return View(inventory);
        }

Просмотр:

<div class="form-group">
    <label asp-for="QTY" class="control-label"></label>
    <input asp-for="QTY" class="form-control" />
    <span asp-validation-for="QTY" class="text-danger"></span>
</div>

РЕДАКТИРОВАТЬ: переход к публикации c int? QTY не работает - такая же проблема сохраняется, теперь только ошибка - поле QTY является обязательным, поскольку значение по умолчанию HTML равно нулю вместо 0. Поле ввода просто не сохранит значение.

1 Ответ

1 голос
/ 29 января 2020

Ваша привязка неверна [Bind("InventoryID,Quantity,BinID,ProductID")] Inventory inventory. Вы должны сделать что-то вроде этого: [Bind("InventoryID,QTY")] Inventory inventory.

Фактически, когда вы отправляете форму, она отправляет объект словаря, а затем класс Bind проверяет, есть ли какое-либо соответствие между вашим объектом (в данном случае Inventory). ) и отправленный словарь.

Если ваш объект Inventory имеет другие свойства, которые вы можете использовать, и их привязку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...