Данные о нажатии кнопки дескриптора страницы .Net Core 2.0 Razor - PullRequest
0 голосов
/ 27 апреля 2018

С Razor Pages, каков наилучший способ справиться с такой ситуацией, когда я хотел бы, чтобы пользователь нажимал кнопку в таблице, а затем имел задачу, которая использует элементы, переданные из строки для действия?

Пока у меня есть таблица, загруженная моделью данных, и я бы хотел, чтобы они щелкнули по строке и использовали эту строку в своем действии:

Модель данных:

   public struct CollapseReportModel
{
    public HighLevelOutput Summary { get; set; }
    public IEnumerable<HighLevelOutput> WeeksOfData { get; set; }
}

Таблица:

<div class="container">
    <div id="accordion">
        @{int counter = 0; }
        @foreach (var dataVM in Model.CollapseReport)
        {
            <div class="card">
                <div class="card-header" id="heading@(counter)">
                    <h5 class="mb-0">
                        <button class="btn btn-link" data-toggle="collapse" data-target="#collapse@(counter)" aria-expanded="true" aria-controls="collapse@(counter)">
                            @dataVM.ToString()

                        </button>
                    </h5>
                </div>

                <div id="collapse@(counter)" class="collapse" aria-labelledby="heading@(counter)" data-parent="#accordion">
                    <div class="card-body">

Я пытаюсь использовать это нажатие кнопки для отправки данных в задачу, но она просто передает нулевые значения:

                        <form method="post">
                            <input type="submit" class="btn btn-default" value="Add to Log" asp-page-handler="AddLog" asp-route-data="@dataVM.Summary.CorpCustomer, @dataVM.Summary.Item)" />
                        </form>

                        <ul class="list-group">
                            @foreach (var item in dataVM.WeeksOfData)
                            {
                                <li class="list-group-item">@($"{item.Item}, {item.ItemDescription}, {item.CorpCustomer}, {item.SummedOrder}, {item.SummedForecast}, {item.Difference}, {item.Week}")</li>
                            }
                        </ul>
                    </div>
                </div>
            </div>
            counter++;
        }
    </div>
</div>
<script src="~/jquery.js"></script>
<script src="~/bootstrap.js"></script>

к этому обработчику:

    public  Task<IActionResult> OnPostAddLog(string var1, string var2)
    {
        //Use elements from the row to perform an action
        var test = var1;
        var t2 = var2;

        return null;
    }

1 Ответ

0 голосов
/ 27 апреля 2018

Просто добавьте входные данные в вашу форму, чтобы они были опубликованы в вашем действии.

<form method="post">
    <input type="hidden" name="var1" value="@dataVM.WhateverProperty1" />
    <input type="hidden" name="var2" value="@dataVM.WhateverProperty2" />
    <input type="submit" class="btn btn-default" value="Add to Log" asp-page-handler="AddLog" asp-route-data="@dataVM.Summary.CorpCustomer, @dataVM.Summary.Item)" />
</form>

Обязательно сопоставьте имя входа с именем параметра в вашем действии.

Кроме того, украсьте ваш метод OnPostAddLog с помощью [HttpPost], так как ваша форма использует метод POST.

...