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