【问题标题】:asp.net Core 3.1 Filter Form trigger refresh of pageasp.net Core 3.1 过滤表单触发页面刷新
【发布时间】: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


【解决方案1】:

您的代码未完整提供。我们不能确切地知道你是什么 在 refreshSummary 操作中做了。

但是这里的500错误是你返回Summary视图时没有re-bind对应的数据源到select (@QueryModel.EpicTypes)

返回Summary视图时,需要将@QueryModel.EpicTypes的值作为参数返回,并重新绑定选中的数据源。

    public IActionResult refreshSummary(SummaryModel filterData)
    { 
        //  .. do filtering here ..
        filteredPorts.Sort();
        return View("Index", summary);//here summary contains @QueryModel.EpicTypes data
    }

【讨论】:

  • EpicTypes 是一个静态列表。这似乎与此无关。我可以对列表进行硬编码,但问题仍然存在
  • @JeremyK,您能否向我们展示有关您的问题的更详细代码?
猜你喜欢
  • 2021-12-25
  • 1970-01-01
  • 2017-04-13
  • 2010-12-30
  • 2016-08-01
  • 2020-07-09
  • 1970-01-01
  • 2023-04-03
  • 2020-05-06
相关资源
最近更新 更多