【发布时间】:2020-05-29 14:34:23
【问题描述】:
我正在努力找出实现这一目标的正确方法。
我有一个包含大量数据的视图。在视图的顶部,我添加了一个带有一些过滤选项的表单。一旦他们单击提交,我想触发对 C# 控制器的调用以过滤掉数据并触发页面刷新。通过调用窗口以通过javascript进行刷新,我能够在不传递任何参数的情况下做到这一点。但是,一旦我试图让用户输入数据,我就一直碰壁。当试图传递给 javascript 时,它总是加载模型的初始状态。因此,我尝试将其更改为使用调用该操作的表单,该表单在后端有效,但现在它在返回视图时仅出错 500,我不知道为什么。
这样做的正确方法是什么?
Summary.cshtml
@model SummaryModel
<!-- ... excluding content -->
<form id="form" asp-area="" asp-controller="Home" asp-action="refreshSummary">
<div class="col-md-6">
<div class="form-group">
<label asp-for="EpicType" class="label-control"></label>
<select asp-for="EpicType" class="form-control" asp-items="@QueryModel.EpicTypes"></select>
<span asp-validation-for="EpicType" class="text-danger"></span>
</div>
</div>
<p></p>
<div class="form-group" style="align-content: center; text-align: center; padding-bottom: 5px;" ;>
<button type="submit" id="submitbtn" class="btn btn-sm btn-primary rounded-0">Apply</button>
</div>
</form>
<!-- ... excluding content -->
页面的其余部分只是显示数据,不确定它是否与问题相关。申请时,我想用新过滤的结果更新页面。
HomeController.cs
/// <summary>
/// Refreshes the list of epics based on filters
/// </summary>
/// <param name="FilterModel">filterData</param>
/// <returns>result</returns>
public IActionResult refreshSummary(SummaryModel filterData)
{
.. do filtering here ..
filteredPorts.Sort();
return View("Summary");
}
我打这个电话很好。但是返回是当一个 500 错误发生时,我在 Visual Studio 中不知道为什么。 在启动时我有:
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Summary}");
【问题讨论】:
-
您的摘要视图需要一个 SummaryModel 类型的模型,但您没有将任何模型传递给视图。
标签: javascript c# asp.net-core