Я только начинаю заниматься веб-программированием (используя 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].В нем хранятся полные данные для каждой строки в таблице.
Как вернуть данные на сервер при нажатии кнопки Отправить.
Спасибо!