从下拉菜单发送参数到相同的URL

时间:2019-09-02 06:11:17

标签: bootstrap-4 razor-pages

我正在尝试将多个菜单链接打到同一剃刀页面,但是发送不同的参数以从数据库返回不同的结果。

通常,我只是将值附加到查询字符串中,然后在单击新页面链接时检索它,但是我不知道剃刀页面如何做到这一点。 例如,我想转到名为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>

1 个答案:

答案 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属性。 详细信息: