首页 > 解决方案 > 使用 Razor 页面路由到控制器

问题描述

我的 _partial.cshtml 中有以下表格:

<form class="form-inline text-center" asp-controller="Search" asp-action="Index">
 @Html.TextBoxFor(m => new Search().SearchTerm, new { @class = "form-control search-term-box", placeholder = "Search keyword" })
       <span class="btn btn-outline-primary mr-1 ml-1">Near</span>
        @Html.TextBoxFor(m => new Search().Location, new { @class = "form-control search-term-box mr-2", placeholder = "Los Angeles, CA" })
   <button class="btn btn-primary my-2 my-sm-0" type="submit">Search</button>
   </form>

我的 SearchController.cs:

        [BindProperty]
        public Search SearchModel { get; set; }

        [HttpPost]
        public IActionResult Index(Search term, Search location = null)
        {
            SearchModel = new Search()
            {
                SearchTerm = term.ToString(),
                Location = location.ToString()
            };

            //(Razor) Search Page with no page model
            //Bind SearchModel to page
            return View("Search");
        }

在 ASP.Net MVC 中,我可以做这样的事情,它会正常工作,但我如何让它与 ASP.Net Core Razor Pages 一起使用?单击提交按钮什么也不做。如果它在我的 Startup.cs 中很重要,我services.AddMvc(o => o.EnabledEndpointRouting = false);在 ConfigureServices 方法和app.UseMvc();Configure 方法下。我是 Razor Pages 的新手,所以如果有更好的实现相同的约定,请提出建议。

编辑:我找到了解决方案,我在搜索控制器中添加了一个路由属性。尽管它是一个合适的解决方案,但我基本上将 MVC 约定应用于由 Razor Pages 组成的项目。如果有人可以提供适用于 Razor Pages 的解决方案,欢迎回答。

标签: asp.net-mvcrazor-pages

解决方案


默认情况下,剃须刀页面需要位于根文件夹下,其默认命名约定为“/Pages”。您可以在 startup.cs 文件中找到它。将文件夹名称更改为您想要的项目文件夹名称“xyz”,然后尝试将您的页面导航为 controllername/index.cshtml。不要忘记将扩展名添加为 .cshtml


推荐阅读