【问题标题】:ASP Core Razor Syntax @for -> multiple submitbuttons with diffrent inputs?ASP Core Razor 语法@for -> 具有不同输入的多个提交按钮?
【发布时间】: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


【解决方案1】:

为了发回一个对象,您可以为每个对象使用一个表单,命名字段对应于您的对象属性名称。

试试这个:

  @for (var i = 0; i < bereiche.Count; i++)
{
    <form method="post" class="center">
        <input name="art" type="hidden" value="@bereiche[i].art" />
        <button name="name" value="@bereiche[i].name" class="btn btn-info">@bereiche[i].name</button>
    </form>
}

如果你想让你的按钮保存一个值,你需要像我在示例中所做的那样将值放在一个值标签中。

【讨论】:

  • 好的,这将在这个范围内工作,但我想将多个对象添加到我已经拥有的表单中。如果我做多个表格,这会弄乱我的布局。我会接受来自@poke 的遮阳篷
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-24
  • 2011-04-26
  • 1970-01-01
  • 1970-01-01
  • 2011-12-13
  • 1970-01-01
  • 2015-05-04
相关资源
最近更新 更多