Как разместить неформальные данные со страницы Razor на модель страницы - PullRequest
0 голосов
/ 11 марта 2019

Я только начинаю заниматься веб-программированием (используя Razor Pages), и у меня возникает проблема с выяснением того, как публиковать данные, которые непосредственно не введены в форму, на сервер.Я надеюсь сделать это без Ajax, так как мне нужно перенаправить после обработки данных.

Вот фрагмент формы [.cshtml]

@page
@model TaiRoxWeb.Models.FilterModel
@{
    ViewData["Title"] = "Filter";
}

<h1>@ViewData["Title"]</h1>

<form method="post">
    <div class="card">
        <div class="card-header">
            Filter Criteria
        </div>
        <div class="card-body">
            <table class="table table-sm" id="tblFilter">
                <thead>
                    <tr>
                        <th>
                            Line
                        </th>
                        <th>
                            @Html.DisplayNameFor(model => model.FilterTerms[0].DisplayFieldName)
                        </th>
                        <th>
                            @Html.DisplayNameFor(model => model.FilterTerms[0].DisplayOperation)
                        </th>
                        <th>
                            @Html.DisplayNameFor(model => model.FilterTerms[0].DisplayValues)
                        </th>
                        <th>

                        </th>
                    </tr>
                </thead>
                <tbody></tbody>
            </table>
            <div class="text-left">
                <button type="button" class="btn btn-sm" id="btnAddLine">Add...</button>
                <button type="button" class="btn btn-sm" id="btnClearAll">Clear</button>
            </div>
        </div>
    </div>
    <br />

    <button type="submit" class="btn btn-sm btn-secondary" asp-page-handler="Cancel" asp-route-PageName="@Model.PageName">Cancel</button>
    <button type="submit" class="btn btn-sm btn-primary" asp-page-handler="Submit" asp-route-PageName="@Model.PageName" asp-route-FilterTerms="FilterTerms">Submit</button>
</form>

На странице загрузить существующие данныедобавляется к столу.Модальное всплывающее окно используется для добавления / редактирования данных, которые обновляют таблицу.

Это обработчик страницы для кнопки Отправить.

public ActionResult OnPostSubmit([FromForm] List<SelectTerm> filter)
{
    if (!ModelState.IsValid)
    {
        return Page();
    }
    return RedirectToPage(@"/" + PageName);
}

Модель

public class SelectTerm
{
    public int Id { get; set; }

    public string FieldName { get; set; } // select field's Name

    /// <summary>
    /// This is the display-friendly form of FieldName that is shown in the selection criteria grid.
    /// </summary>
    [Display(Name = "Field")]
    public string DisplayFieldName { get; set; } // select field's DisplayName

    public SelectOperation Operation { get; set; }

    /// <summary>
    /// This is the display-friendly form of Operation that is shown in the selection criteria grid.
    /// </summary>
    [Display(Name = "Operation")]
    public string DisplayOperation { get; set; }

    /// <summary>
    /// Gets or sets Values.
    /// This is a list of strings in order to support the "Is One Of" operation.
    /// All filter types except "Is One Of" use only the first item in the list.
    /// </summary>
    public List<string> Values { get; set; }

    /// <summary>
    /// This is the display-friendly form of Values that is shown in the selection criteria grid.
    /// </summary>
    [Display(Name = "Value(s)")]
    public string DisplayValues { get; set; }
}

Свойства, удобные для отображения, отображаются на языке пользователя в таблице формы.Необработанные (не зависящие от языка) свойства требуются обратно на сервер для обработки.

При добавлении / редактировании критериев выбора / фильтра поддерживается массив javascript [named FilterTerms].В нем хранятся полные данные для каждой строки в таблице.

Как вернуть данные на сервер при нажатии кнопки Отправить.

Спасибо!

1 Ответ

1 голос
/ 11 марта 2019

Единственный способ вернуть данные на сервер - через почту.В результате все данные, которые вы хотите отправить, должны иметь связанный ввод в форме, даже если он скрыт.

Единственный другой вариант - использовать JS для создания собственного тела сообщения и отправки его через AJAX.Вы все еще можете технически перенаправить путем изменения location в обратном вызове AJAX.Однако лучше и проще просто использовать традиционную форму сообщения, если только вам не нужно оставаться на той же странице.

ОБНОВЛЕНИЕ

После того, как выПри более внимательном рассмотрении, я думаю, что ваша проблема может заключаться в том, что данные, которые вам требуются, предназначены только для отображения и не должны публиковаться в самом начале.Если это так, решение состоит в том, чтобы перестроить вашу модель представления по почте.Если есть какое-либо свойство (свойства), которые предназначены только для отображения, то эти значения должны устанавливаться каждый раз, какой бы код ни устанавливал их в первую очередь.Мне нужно увидеть больше вашего кода, чтобы дать вам более конкретные указания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...