【发布时间】:2020-01-17 10:00:18
【问题描述】:
我正在尝试使用 Razorpages 创建一个 ASP 核心应用程序。
到目前为止一切正常,但现在我遇到了这个问题:
我想创建一个基于 Objectarray 的具有多个按钮的表单。每个按钮都有自己的名称,并且应该调用相同的 OnPost 方法。到目前为止,一切都很好。我很难用表格发布正确的对象。
这是一些代码......
Test.cshtml:
@page
@using APP.Models
@model TestModel
@{
ViewData["Title"] = "Test";
Layout = "~/Pages/Shared/_Layout.cshtml";
var bereiche = Bereich.getBereiche();
}
<div class="grid">
<h1 class="center-text">@ViewData["Title"]</h1>
<form method="post" class="center">
<div class="form-group">
<label asp-for="Model" class="col-form-label"></label>
<div class="button-group-vertical">
@for (var i = 0; i < bereiche.Count; i++)
{
<input type="hidden" asp-for="Model" value="@bereiche[i]" />
<button class="btn btn-info btn-md button-group-vertical-item">@bereiche[i].name</button>
}
</div>
</div>
</form>
</div>
命名空间模型中的 Bereich.cs
public enum Art
{
Mitte, Beladen, Inspection, Kette
}
public class Bereich
{
public string name { get; set; }
public Art art { get; set; }
public static List<Bereich> getBereiche()
{
var bereiche = new List<Bereich>
{
new Bereich() { name="Mitte", art = Art.Mitte},
new Bereich(){name= "Beladen",art = Art.Beladen },
new Bereich(){name = "Qualitätskontrolle",art = Art.Inspection},
new Bereich(){name ="Kette",art= Art.Kette}
};
return bereiche;
}
}
Test.cshtml.cs:
public class TestModel : PageModel
{
[DisplayName("Bereich")]
[BindProperty]
public Bereich Model { get; set; }
public void OnGet()
{
}
public IActionResult OnPost()
{
return Page(); // BREAKPOINT HERE -> MODEL always "art=Mitte", "name=null" :/
}
}
有人知道我做错了什么吗?
【问题讨论】:
-
模型是
{ art = Mitte, name = null },因为这是Bereich模型中这些属性的两个默认值。您不应该尝试发布复杂的对象;这通常会失败。相反,在表单中发布一些标识符,然后使用它来解析服务器上正确的Bereich对象。 -
@poke 好的,我以为会有另一种方法,但谢谢。我向 Bereich - 类添加了一个 ID,并将我的按钮更改为如下所示: 在 PageModel 我查找 Posted ID 并获取对应的 Bereich 对象
标签: c# asp.net-core razor-pages