Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查看post表单返回空值?_C#_.net_Asp.net Core_Asp.net Core Mvc - Fatal编程技术网

C# 查看post表单返回空值?

C# 查看post表单返回空值?,c#,.net,asp.net-core,asp.net-core-mvc,C#,.net,Asp.net Core,Asp.net Core Mvc,我在使用表单返回模型时遇到问题 问题是,当我提交表单时,即使我指定了返回模型的值,这些值也是空的 这是我的控制器 这是我的视图,返回null @model MyEnglishDictionary.Models.Dictionary @{ ViewData["Title"] = "Create"; } <h2>Create</h2> <form method="post" asp-action="Create"> <div class="

我在使用表单返回模型时遇到问题

问题是,当我提交表单时,即使我指定了返回模型的值,这些值也是空的

这是我的控制器

这是我的视图,返回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"); }
}

我使用的是Net Core 2.1,但我有几个项目使用相同的方法将表单模型从视图传递到控制器,它们可以工作。

您必须将属性绑定到模型。就你而言:

public async Task<IActionResult> Create([Bind("Word, Meaning, Pronounciation")] Dictionary word)
公共异步任务创建([Bind(“单词、意思、发音”)]字典单词)
进一步阅读:

您需要注意参数和字段的名称

对于您的问题,这是由于您定义了一个字段,该字段为
Word
,参数为
Word
,导致绑定失败


尝试将
public async Task Create(Models.Dictionary word)
更改为
public async Task Create(Models.Dictionary Dictionary)
word
参数名更改为类似
\u word
的其他名称,编译器似乎不接受它作为c中的参数名

公共异步任务创建(Models.Dictionary\u word)
{
如果(!ModelState.IsValid)
{
返回视图(_-word);
}
_db.添加(_单词);
等待_db.SaveChangesAsync();
返回重定向到操作(名称(索引));
}

顺便说一句,我没有在保留关键字中看到它

可能您没有将绑定属性添加到您的模型
[BindProperty]
,您可以在问题中发布控制器而不是图片。您的@Html.AntiForgeryToken()在哪里方法?@FatikhanGasimov和Asp.Net Core 2或更高版本表单标记将自动将反伪造令牌注入html表单元素,请参阅文档您应该在答案中发布控制器代码,而不是屏幕截图,对于试图帮助您的人来说,这要困难得多。您可以添加
Dictionary
class吗?使用.Net Core,您不必添加
@Html.AntiForgeryToken()
,因为它将自动注入表单标记中。有关详细信息,请参阅details@LazZiya谢谢,我不知道。
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; }
    }
}
public async Task<IActionResult> Create([Bind("Word, Meaning, Pronounciation")] Dictionary 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));
}