ASP.NET Core Razor页面搜索提交丢失pageSize路由参数问题
问题原因与解决方案
核心原因
使用method="get"的表单提交时,部分浏览器会丢弃form的action属性中已有的查询字符串,仅将表单内部控件的参数拼接到URL中。你虽然在form/按钮上通过asp-route-pageSize生成了带pageSize的action,但提交时浏览器会忽略这部分参数,只提交levelFilter对应的表单控件值。
而「返回完整列表」的链接是直接构造了包含pageSize的完整URL,点击时浏览器会完整发起该URL请求,因此能正常保留pageSize参数。
解决步骤
修正PageModel属性绑定
确保PageSize和搜索参数(如LevelFilter)都添加[BindProperty(SupportsGet = true)]标记,允许Get请求绑定这些属性:public class IndexModel : PageModel { [BindProperty(SupportsGet = true)] public int PageSize { get; set; } = 10; // 设置默认页大小 [BindProperty(SupportsGet = true)] public string LevelFilter { get; set; } // 其他分页逻辑(如PageIndex、数据查询方法) }用隐藏字段传递pageSize
移除form或按钮上的asp-route-pageSize,改为在表单内部添加隐藏字段,将当前pageSize作为表单参数提交:<form method="get" asp-page="./Index"> <!-- 隐藏字段传递当前页大小 --> <input type="hidden" asp-for="PageSize" /> <!-- 搜索输入框 --> <input asp-for="LevelFilter" placeholder="输入级别筛选..." /> <button type="submit">搜索</button> </form>验证效果
提交搜索后,URL应同时包含pageSize和levelFilter参数(如/Index?PageSize=10&LevelFilter=xxx),PageModel能正常接收这两个参数进行分页+搜索查询。
内容的提问来源于stack exchange,提问作者Wade Baird
相关产品推荐
相关产品推荐

