Форма просмотра сообщений возвращает null?

У меня проблемы с возвратом модели с помощью формы.

Проблема в том, что когда я отправляю форму, значения равны нулю, хотя я указал, что возвращает модель

это мой контроллер

Форма просмотра сообщений возвращает null?

И это мой вид, который возвращает ноль.

@model MyEnglishDictionary.Models.Dictionary
@{
    ViewData["Title"] = "Create";
}
<h2>Create</h2>
<form method = "post" asp-action = "Create">
    <div class = "p-4 border rounded">
        <div asp-validation-summary = "ModelOnly" class = "text-danger"></div>
        <div class = "form-group row">
            <div class = "col-2">
                <label asp-for = "Word"></label>
            </div>
            <div class = "col-5">
                <input asp-for = "Word" class = "form-control" />
            </div>
            <span asp-validation-for = "Word" class = "text-danger"></span>
        </div>

        <div class = "form-group row">
            <div class = "col-2">
                <label asp-for = "Meaning"></label>
            </div>
            <div class = "col-5">
                <input asp-for = "Meaning" class = "form-control" />
            </div>
            <span asp-validation-for = "Meaning" class = "text-danger"></span>
        </div>

        <div class = "form-group row">
            <div class = "col-2">
                <label asp-for = "Pronunciation"></label>
            </div>
            <div class = "col-5">
                <input asp-for = "Pronunciation" class = "form-control" />
            </div>
            <span asp-validation-for = "Pronunciation" class = "text-danger"></span>
        </div>
        <br />
        <div class = "form-group">
            <input type = "submit" class = "btn btn-primary" value = "Create" />
            <a asp-action = "Index" class = "btn btn-success">Back To List</a>
        </div>
    </div>
</form>
@section Scripts{
    @{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); }
}

РЕДАКТИРОВАТЬ

Это мой контроллер словаря.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using MyEnglishDictionary.Data;
using MyEnglishDictionary.Models;

namespace MyEnglishDictionary.Controllers
{
    public class DictionaryController : Controller
    {
        private readonly ApplicationDbContext _db;

        public DictionaryController(ApplicationDbContext db)
        {
            _db = db;
        }


        public IActionResult Index()
        {
            return View(_db.Dictionaries.ToList());
        }

        public IActionResult Create()
        {
            return View();
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Create(Models.Dictionary word)
        {
            if (!ModelState.IsValid)
            {
                return View(word);
            }

            _db.Add(word);
            await _db.SaveChangesAsync();

            return RedirectToAction(nameof(Index));
        }
    }
}

А это моя модель словаря

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace MyEnglishDictionary.Models
{
    public class Dictionary
    {
        [Key]
        public int Id { get; set; }
        [Required]
        public string Word { get; set; }
        [Required]
        public string Meaning { get; set; }
        [Required]
        public string Pronunciation { get; set; }
        public string Link { get; set; }
        public DateTime Date { get; set; }
    }
}

Я использую Net Core 2.1, но у меня есть несколько проектов, которые я использую таким же образом для передачи модели формы из представления в контроллер, и они работают.

возможно, вы не добавили атрибут привязки к своей модели [BindProperty], можете ли вы разместить свой контроллер в вопросе не как на картинке.

LazZiya 04.03.2019 05:43

Где ваш метод @Html.AntiForgeryToken()?

Fatikhan Gasimov 04.03.2019 06:30

@FatikhanGasimov с Asp.Net Core 2 или более поздней версии тег формы автоматически вставит токен защиты от подделки в элементы формы html, см. документацию здесь

LazZiya 04.03.2019 07:46

Вы должны опубликовать код своего контроллера в ответе вместо скриншотов, это намного сложнее для людей, пытающихся вам помочь.

Tseng 04.03.2019 09:19

Не могли бы вы добавить свой Dictionary класс?

Alexander 04.03.2019 13:37

Есть моя Модель и полный Контроллер

EdoRguez 04.03.2019 22:00

@LazZiya Я установил свойство привязки [Key] к идентификатору, а [Required] к слову и значению, но все равно не работает :(

EdoRguez 05.03.2019 04:01
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
7
407
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы должны привязать свойства к вашей модели. В твоем случае:

public async Task<IActionResult> Create([Bind("Word, Meaning, Pronounciation")] Dictionary word)

Дальнейшее чтение: Привязка модели

с .Net Core вам не нужно добавлять @Html.AntiForgeryToken(), потому что он будет автоматически внедрен в тег формы, см. документация для получения более подробной информации.

LazZiya 04.03.2019 14:33

@LazZiya Спасибо, не знал.

Jay Fridge 04.03.2019 14:50
Ответ принят как подходящий

Нужно обратить внимание на название параметра и полей.

Для вашей проблемы это вызвано тем, что вы определили поле Word и параметр word, что привело к сбою привязки.

Попробуйте заменить public async Task<IActionResult> Create(Models.Dictionary word) на public async Task<IActionResult> Create(Models.Dictionary dictionary).

измените имя параметра word на что-то другое, например _word, похоже, что компилятор не принимает его в качестве имени параметра в С#.

public async Task<IActionResult> Create(Models.Dictionary _word)
{
    if (!ModelState.IsValid)
    {
        return View(_word);
    }

    _db.Add(_word);
    await _db.SaveChangesAsync();

    return RedirectToAction(nameof(Index));
}

кстати, я не видел его в зарезервированных ключевых словах список

Другие вопросы по теме