asp.net-mvc - 使用 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 的解决方案,欢迎回答。
解决方案
默认情况下,剃须刀页面需要位于根文件夹下,其默认命名约定为“/Pages”。您可以在 startup.cs 文件中找到它。将文件夹名称更改为您想要的项目文件夹名称“xyz”,然后尝试将您的页面导航为 controllername/index.cshtml。不要忘记将扩展名添加为 .cshtml
推荐阅读
- javascript - Node/NestJs:如何从方法中注入类?
- python - Keras 中的 2CNN:形状不匹配
- mongodb - 如何获取原始 M 中的值
- python - 如何使用 python 正则表达式捕获乘法的重复操作数
- c++ - 快速填充 boost::unordered_set
- python - 我如何解决这个错误以用 Python 抓取 Twitter?
- php - PhpStorm 如何自定义浏览器图标 URL
- javascript - JS:用for循环删除多个子节点?
- python - 使用自制分离器获得精确度、召回率、F1 分数
- javascript - 将数组对象转换为数组值