Mysql 多按钮表单没有';t将数据映射回TextBox.net core 1.1

Mysql 多按钮表单没有';t将数据映射回TextBox.net core 1.1,mysql,forms,asp.net-core-mvc,Mysql,Forms,Asp.net Core Mvc,好的,现在我正试图学习.NETCoreMCV,但我在将数据从MySQL映射回表单时遇到了一个问题。当我使用单个按钮将表单设置为单个文本框,并将表单外部的其他字段(但在同一页面上)设置为单个文本框时,映射工作正常。如果我包括表单中的所有字段,则会获得数据,但不会显示在页面上。我甚至将多个提交按钮中的一个编码为数据更新。我使用第一个文本框从数据库中获取项目,它会这样做(但不会映射到文本框),然后在第二个文本框(应该有现有数据,但为空)中,我将要更新的信息放入数据库中,单击该文本框的提交按钮,然后更新

好的,现在我正试图学习.NETCoreMCV,但我在将数据从MySQL映射回表单时遇到了一个问题。当我使用单个按钮将表单设置为单个文本框,并将表单外部的其他字段(但在同一页面上)设置为单个文本框时,映射工作正常。如果我包括表单中的所有字段,则会获得数据,但不会显示在页面上。我甚至将多个提交按钮中的一个编码为数据更新。我使用第一个文本框从数据库中获取项目,它会这样做(但不会映射到文本框),然后在第二个文本框(应该有现有数据,但为空)中,我将要更新的信息放入数据库中,单击该文本框的提交按钮,然后更新数据库(但视图中的文本框仍为空)

我的模型:

 using System;

namespace DbTest.Models
{
public class ProductInventory
    {
         public string Field1 { get; set; }
         public string Field2 { get; set; }
         public string Field3 { get; set; }
         public int Field4 { get; set; }
    }
}
我的控制器:

using System;
using Microsoft.AspNetCore.Mvc;
using MySql.Data.MySqlClient;
using Microsoft.AspNetCore.Authorization;

using DbTest.Models;

namespace DbTest.Controllers
{
    public class InventoryController : Controller
    {
//        [Authorize]
        public IActionResult Index()
        {
            return View();
        }

        [HttpPost]
        public IActionResult ProcessForm(string button, ProductInventory p)
        {
            IActionResult toDo = null;

            if (button == "Button1")
            {
                toDo = GetItem(p);
            }
            if (button == "Button2")
            {
                toDo = UpdateField2(p);
            }
            if (button == "Button3")
            {
                toDo = UpdateField3(p);
            }
            if (button == "Button4")
            {
                toDo = UpdateField4(p);
            }

            return toDo;
        }

//        [HttpPost]
        public IActionResult GetItem(ProductInventory p)
        {
    //CODE SNIP - DATABASE QUERY, IT ALL WORKS, SO WHY BOTHER YOU WITH THE DETAILS?
        return View("Index", p);
        }

        public IActionResult UpdateField2(ProductInventory p)
        {
      //CODE SNIP - DATABASE UPDATE, ALL WORKS, NOTHING TO SEE HERE
        return View("Index", p);
        }
    }
}
最后,我的观点是:

@model DbTest.Models.ProductInventory

@{
    ViewData["Title"] = "Inventory Page";
}

@using (Html.BeginForm("ProcessForm", "Inventory", FormMethod.Post))
{
        <div>
            Search Item (Field 1): 
            @Html.TextBoxFor(model => model.Field1)
            <input type="submit" name="button" value="Button1" />
        </div>
        <div>
            Field 2: 
            @Html.TextBoxFor(model => model.Field2)
            <input type="submit" name="button" value="Button2" />
        </div>
        <div>
            Field 3: 
            @Html.TextBoxFor(model => model.Field3)
            <input type="submit" name="button" value="Button3" />
        </div>
        <div>
            Field 4: 
            @Html.TextBoxFor(model => model.Field4)
            <input type="submit"  name="button" value="Button4" />
        </div>
}
@model DbTest.Models.ProductInventory
@{
ViewData[“Title”]=“库存页面”;
}
@使用(Html.BeginForm(“ProcessForm”、“Inventory”、FormMethod.Post))
{
搜索项(字段1):
@Html.TextBoxFor(model=>model.Field1)
字段2:
@Html.TextBoxFor(model=>model.Field2)
字段3:
@Html.TextBoxFor(model=>model.Field3)
字段4:
@Html.TextBoxFor(model=>model.Field4)
}
重申一下,如果我在按钮1后关闭表单:

@using (Html.BeginForm("ProcessForm", "Inventory", FormMethod.Post))
{
        <div>
            Search Item (Field 1): 
            @Html.TextBoxFor(model => model.Field1)
            <input type="submit" name="button" value="Button1" />
        </div>
}
        <div>
            Field 2: 
//etc.
@使用(Html.BeginForm(“ProcessForm”、“Inventory”、FormMethod.Post))
{
搜索项(字段1):
@Html.TextBoxFor(model=>model.Field1)
}
字段2:
//等等。
映射可以工作,但只有表单的第一个字段和按钮可以工作。当表单围绕所有四个字段和按钮时,映射不起作用,但第二个按钮的编码会在单击按钮2时更新数据库

有人能解释一下我做错了什么吗


谢谢!

首先,不要在ASP.NET Core中使用html帮助程序。它们可以工作,但不是最佳做法。请尽可能使用。此外,不要将数据库模型用作视图模型

关于您的
索引
操作:您忘记将视图模型传递给视图

ProcessForm
操作中,实例化
IActionResult
,然后为其分配一个(操作)函数。不要这样做。而是使用
返回重定向到操作(“操作名称”);
。 在您的情况下,我将在
ProcessForm
操作中或在不返回
IActionResult
的函数中处理DB更新

总之,我只能建议您阅读ASP.NET核心文档,然后再次询问您是否仍然无法使用它。我建议您从阅读开始