【问题标题】:Dot net core action="." refers to controller but not action点网核心动作=“。”指的是控制器而不是动作
【发布时间】:2017-07-26 16:26:04
【问题描述】:

我有一个名为 CasesController 的控制器,它又包含以下方法:

    [HttpGet("Cases/Active")]
    public IActionResult GetActive()
    {
        return View("CaseList", _caseRepository.GetAll());
    }

另外,CaseList.cshtml 文件包含以下形式:

<form class="form" method="get" action=".">
</form>

(实际上,这个表单是在渲染到CaseList 视图中的局部视图中,我想从几个不同的控制器方法中使用相同的局部视图)。此表单用于GET返回原始页面,并带有一些过滤参数以限制显示的记录数。

我希望这个表单回发到//Server/Cases/Active?FormField1=&amp;FormField2= 相反,方法名称被遗漏在GET 发送到的 URL 之外://Server/Cases/?FormField1=&amp;FormField2=

如何让浏览器识别返回生成页面的 URL 的完整路径?

【问题讨论】:

  • 您为什么要使用. 进行操作?那是您的浏览器解释 URL,与 .Net Core 无关。
  • 因为我想GET 回到当前 URL,这可能会有所不同(在 \Cases\Active\Cases\Closed 之间,具体取决于哪个视图呈现了包含表单的部分内容。

标签: http asp.net-core


【解决方案1】:

如果您希望 URL 与您所在的页面完全相同,但没有查询字符串,那么您需要使用问号 (?) 而不是句点 (.) 或将其留空。例如,假设我们在一个 URL 为 http://www.example.com/path/thing?value=1 的页面上,那么目标操作将按如下方式计算:

.   =>  http://www.example.com/path/?form=1
?   =>  http://www.example.com/path/thing?form=1

注意:这在任何地方都没有得到很好的定义。例如,您可能会发现不同的浏览器会给您不同的结果。因此,不指定操作 URL 是非常糟糕的做法。

【讨论】:

  • 谢谢。我试试“?”作为一个直接的解决方案,但最终可能会将此部分视图重写为视图组件以获得额外的功能——这应该允许我将目标 url 作为参数传递。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-09
  • 1970-01-01
  • 1970-01-01
  • 2018-07-07
  • 1970-01-01
相关资源
最近更新 更多