【发布时间】:2021-02-09 22:45:01
【问题描述】:
问题: 我正在用 C# 构建一个完整的堆栈 Web 应用程序,但我无法将表单数据从 Razor 页面获取到控制器中!
这是我的输入表单:
@model OrderProcessingApplication.Model.Order
@{
ViewData["Title"] = "Ordering Application";
}
<div class="text-center">
<h1 class="display-4">Shirt Ordering Application</h1>
<p>Process an order</p>
p>Process an order</p>
<form id="submitOrderForm" action="ProcessNewOrder" method="post">
<fieldset>
<!--Name-->
<label for="fname">First name:</label><br>
<input type="text" id="fname" name="fname" required><br>
<label for="lname">Last name:</label><br>
<input type="text" id="lname" name="lname" required><br><br>
<!--address-->
<label for="address">Address:</label><br>
<input type="text" id="address" name="address" required><br>
<input type="submit" value="Submit">
</fieldset>
</form>
**注意“表单的动作是“ProcessNewOrder”**
这是我的控制器:
public class processOrder : ControllerBase
{
[HttpPost]
public String ProcessNewOrder(Order order)
{
return "order received";
}
}
}
问题:
- 如何更改此设置,以便在发布请求中提交此表单时向控制器提交新的订单模型?
我已经尝试过的:
-
This example from Microsoft 没有帮助,因为它说我应该使用 ProcessOrder : Controller 但它似乎不起作用。 ControllerBase 是唯一可用的。当我尝试使用完全相同的导入时,它显示“控制器是一个命名空间,但被用作一种类型”。
-
This second example from Microsoft 没有帮助,因为: (1) 示例代码不存在了 (2) 11岁以上 (3) 它实际上甚至没有显示正在使用的表单(没有帮助)
-
这两个似乎最接近,但this example 和this other example 仍然指示我使用 : Controller 选项。
我将继续解决这个问题,但这似乎是一件相对常规的事情,我很惊讶没有人对此有明确的文档。
对于那些想知道的人:这是我的订单模型:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace OrderProcessingApplication.Model
{
public class Order : Entity
{
public Order(Guid id, DateTime date, string customerName, string customerAddress, string
customerPhone, COLOR color, Size size, double price, int quantity, double totalCost, Status
status, string notes)
{
DateTime Date = date;
string CustomerName = customerName;
string CustomerAddress = customerAddress;
string CustomerPhone = customerPhone;
COLOR Color = color;
Size Size = size;
double Price = price;
int Quantity = quantity;
Status Status = status;
double TotalCost = totalCost;
string Notes = notes;
}
public DateTime Date { get; set; }
string CustomerName { get; set; }
string CustomerAddress { get; set; }
string CustomerPhone { get; set; }
COLOR Color { get; set; }
Size size { get; set; }
double price { get; set; }
int Quantity { get; set; }
Status Status { get; set; }
double TotalCost { get; set; }
string Notes { get; set; }
}
}
更新
我得到的错误总是一样的:
找不到此本地主机页面 没有找到该网络的网页 地址:https://localhost:44367/ProcessNewOrder HTTP ERROR 404
我尝试过以下更接近的示例之一:
namespace OrderProcessingApplication.Controller
{
[Route("ProcessNewOrder")]
[ApiController]
public class processOrder : ControllerBase
{
[HttpPost]
public String ProcessNewOrder([FromBody] Order order)
{
return "order received";
}
}
}
再次出现同样的 404 错误。
【问题讨论】:
-
Route("/....")或者它是一个相对路径......虽然我实际上会用表单标签助手修复它。 -
@JeremyLakeman 不起作用。完全相同的结果。
-
我认为 MVC 只会绑定 c#9 记录类型的构造函数。否则,您将需要可设置的属性和默认构造函数。
标签: c# asp.net-mvc asp.net-core razor