【发布时间】:2019-11-26 23:25:37
【问题描述】:
目前正在重新开发网站的一部分,我正在努力让一些新的 asp.net 功能与旧代码保持一致。
特别是其中一种形式已更改为使用 asp-for 属性:
<div class="form-group label-floating col-lg-6 col-xs-12">
<input asp-for="@this.Model.SearchFilters.Surname" class="form-control" placeholder="@(page.Labels["Surname"].Content.Term)" aria-label="@(page.Labels["Surname"].Content.Term)" />
</div>
<div class="form-group label-floating col-lg-6 col-xs-12">
<input asp-for="@this.Model.SearchFilters.Firstname" class="form-control" placeholder="@(page.Labels["Forenames"].Content.Term)" aria-label="@(page.Labels["Forenames"].Content.Term)" />
</div>
这会生成一个查询字符串,如下所示:
?SearchFilters.Surname=bob&SearchFilters.Firstname=tway
在接下来的控制器操作中,使用Url.Action: 生成返回此页面的路径
Url.Action(
nameof(this.MyMethod),
new { viewModel.SearchFilters.Firstname, viewModel.SearchFilters.Surname });
但这会生成一个没有 SearchFilters 前缀的查询字符串:
?Surname=bob&Firstname=tway
由于与预期模型不匹配,生成的 Url 会导致服务器错误。
我尝试更改 Url.Action 以指定名称,如下所示:
Url.Action(
nameof(this.MyMethod),
new { SearchFilters.Firstname = viewModel.SearchFilters.Firstname, SearchFilters.Surname = viewModel.SearchFilters.Surname });
但这不会编译,说它是“无效的匿名类型成员声明器”。
在理想情况下,我想更改 Url.Action 以包含前缀,但我无法弄清楚这是如何完成的。我会满足于删除 asp-for 生成的前缀,因为如果需要我会更改模型。无论哪种方式,我如何使这两个查询字符串对齐?
【问题讨论】:
标签: c# asp.net asp.net-core