asp-route- [参数]没有被添加到route / url。为什么?

时间:2017-03-26 19:54:53

标签: asp.net asp.net-mvc razor asp.net-core-mvc

我正在为解析器构建一个Web应用程序。主页是一个简单的剃​​刀视图,带有基本控件,允许用户添加输入,稍后将显示解析的结果。此主页面的一个组件是ViewComponent,它返回解析器功能的两个相关部分视图之一:第一个允许用户添加输入的视图,以及一个显示输出的结果视图。显示一个或另一个视图的决定将取决于bool变量“解析”,该变量将记录用户是否添加了输入并进行了解析。我们将主页面调为“Home”,输入视图为“Main”,输出视图为“Results”。如果用户添加输入并单击“Parse”按钮,则“parsed”将为true,并且将加载Results视图。

我已为此行为配置了逻辑和路由,如果我手动键入路由,添加可选参数,我可以毫无问题地进行测试。因此,例如,所有这些都正常工作:

  • localhost:1111 / - >显示主要。
  • localhost:1111 /?parsed = false - >显示主要。
  • localhost:1111 /?parsed = true - >显示结果。
  • localhost:1111 / parser /?parsed = false - >显示主要,等等。

那么问题是什么?当我点击“Parse”按钮时,我无法让系统检索到预期的url localhost:1111 /?parsed = true,而是获取localhost:1111 /?。从this tutorial(以及我读过的更多内容)我明白我需要使用 asp-route- [parameter] ,并且必须匹配方法的签名。在 asp-action 中调用,但我无法使其工作。

这是有问题的按钮:

<div class="col-2">
    <form>
        <button class="button"
                asp-controller="Home" asp-action="Index"
                asp-route-parsed="true">
            Start Parsing
        </button>
    </form>
</div>

这是它所称的方法:

    [Route("parser/{parsed:bool?}")]
    [Route("/{parsed:bool?}")]
    [Route("")]
    public ViewResult Index(bool parsed = false) {
        ViewData["Title"] = "Home";

        if (parsed == true) {
            Helper.parsed = true;
        } else {
            Helper.parsed = false;
        }

        return View("Index", Helper);
    }

我真的很感激这里的一些方向,我已经阅读了几篇文章和文档,但看不出问题出在哪里。在任何人都想看看整个系统the code is available here。提前致谢。

1 个答案:

答案 0 :(得分:0)

您不需要表单来重定向到某个操作。使用简单的链接,如:

<div class="col-2">
    <a class="button"
            asp-controller="Home" asp-action="Index"
            asp-route-parsed="true">
        Start Parsing
    </a>
</div>

同时删除方法中的所有[Route]元素将生成所需的链接。