剃刀页面-将复杂对象绑定到路由参数的模型

时间:2018-12-19 23:19:36

标签: c# asp.net asp.net-mvc razor

我在Asp.Net Core中为页面设置了相当简单的路由模板。

@page "/Meetings"

与此同时,我有一个表单设置来发布一些值

 <form method="post">
        <input asp-for="PageParameters.PageSize" />
        @if (Model.XPaginationDto.PreviousPageLink != null)
        {
            <button type="submit" asp-route-pageNum="@(Model.XPaginationDto.CurrentPage - 1)" class="btn btn-dark text-light">Previous</button>
        }
        @for (var i = 1; i <= Model.XPaginationDto.TotalPages; i++)
        {
            <button type="submit" asp-route-pageNum="@i" class="btn btn-dark text-light">@i</button>
        }
</form>

我的PageModel设置中有一个复杂的对象,如下所示。请注意,我在PageModel上设置了[BindProperties(SupportsGet = true)],以便即使用户正在执行get请求时也可以进行分页。

 public class PageParametersDto
    {
        public int PageNum { get; set; } = 1;
        public int PageSize { get; set; } = 2;
        public string Filters { get; set; }
        public string Sorts { get; set; }
    }

发布表单时,由于输入使用asp-for属性,因此正确绑定了PageSize属性。虽然PageNum属性没有绑定。这是令人惊讶的,因为模型绑定会查找表单,路线和查询数据以绑定属性。

在路由参数级别设置了PageNum属性。将其回发后将无法正常工作。

即当我尝试使用参数重定向到页面时,它没有绑定PageNum属性。

return RedirectToPage("/Meetings", new { PageParameters.PageNum, PageParameters.PageSize }); 

我当然可以做到以下几点:

public IActionResult OnPost(int? PageNum)
        {

            return RedirectToPage("/Meetings", new { PageNum, PageParameters.PageSize });
        }

发生重定向时,在GET请求上,两个参数均正确绑定。表单发布不能做同样的事情怎么办?

我已经在https://www.learnrazorpages.com/razor-pages/model-binding#binding-complex-collections上对此进行了研究。这些示例都没有说明如何将复杂对象绑定到路由参数。

0 个答案:

没有答案