Просмотреть бланк возврата вернуть null? - PullRequest
0 голосов
/ 04 марта 2019

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

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

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

https://i.stack.imgur.com/7P5uY.png

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

@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"); }
}

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

Это мой контроллер Dictionary.

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));
        }
    }
}

А это моя модель Dictionary

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, но у меня есть несколько проектов, которыеЯ использую тот же способ для передачи модели формы из View в контроллер, и они работают.

Ответы [ 3 ]

0 голосов
/ 05 марта 2019

Необходимо обратить внимание на название параметра и поля.

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

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

0 голосов
/ 05 марта 2019

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

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

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

    return RedirectToAction(nameof(Index));
}

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

0 голосов
/ 04 марта 2019

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

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

Дополнительная информация: Привязка модели

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