ASP Core Razor Syntax @for -> несколько кнопок отправки с различными входами? - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь создать ASP Базовое приложение с Razorpages.

Пока все работает нормально, но теперь я застрял с этой проблемой:

Я хочу создать форма с несколькими кнопками на основе Objectarray. Каждая кнопка имеет свое собственное имя и должна вызывать один и тот же метод OnPost. Все идет нормально. Я борюсь с размещением правильного Объекта с формой.

Вот код ...

Test.cs html:

@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.cs html .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" :/
        }
    }

Кто-нибудь знает, что я не так делаю?

1 Ответ

2 голосов
/ 17 января 2020

Чтобы отправить объект обратно, вы можете использовать одну форму для каждого объекта с именованными полями, соответствующими именам свойств вашего объекта.

Попробуйте вместо этого:

  @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>
}

А также если вы хотите, чтобы ваша кнопка содержала значение, вам нужно поместить значение в тег значения, как я делал в примере.

...