我正在尝试将多个菜单链接打到同一剃刀页面,但是发送不同的参数以从数据库返回不同的结果。
通常,我只是将值附加到查询字符串中,然后在单击新页面链接时检索它,但是我不知道剃刀页面如何做到这一点。 例如,我想转到名为CourseList.cshtml的剃须刀页面,并将值Accounting作为值传递,这样我只能撤回会计课程。
asp-page="/CourseList?ccat=accounting"
我知道我可以为每个课程类别创建单独的CourseList页面,但这听起来很脏,并且随着添加新类别,维护成本会更高。
<ul class="navbar-nav flex-grow-1">
<li class="nav-item dropdown">
<a class="nav-link text-dark dropdown-toggle"
href="#" id="navbaddrop" data-toggle="dropdown">
Courses
</a>
<div class="dropdown-menu">
<a class="dropdown-item" asp-page="/CourseList?ccat=accounting">Accounting</a>
<a class="dropdown-item" asp-page="/CourseList?ccat=general">General</a>
<a class="dropdown-item" asp-page="/CourseList?ccat=it">IT</a>
<a class="dropdown-item" asp-page="/CourseList?ccat=manufacturing">Manufacturing</a>
</div>
</li>
</ul>
答案 0 :(得分:1)
如果您希望该值出现在查询字符串中,请将其传递到定位标记帮助器的asp-route-*
参数:
<a class="dropdown-item" asp-page="/CourseList" asp-route-ccat="accounting">Accounting</a>
*
被替换为参数名称。
或者,您可以通过在Razor页面中将路径数据参数指定为@page
指令的一部分,将其作为路径参数(URL中的段)传递:
@page "{ccat}"
然后生成的链接将如下所示:
CourseList/accounting
CourseList/general
在页面本身中,添加一个属性,该属性表示参数并应用了BindProperty
属性:
public class CourseListModel : PageModel
{
[BindProperty(SupportsGet=true)]
public string Ccat { get; set; }
...
模型绑定将自动将查询字符串值分配给public属性。 详细信息: