You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MVC中按钮值传递至控制器失败,请求解决页面重渲染问题

问题分析与解决方案

核心问题

  1. 控制器类字段无法跨请求保存状态:ASP.NET MVC中每个HTTP请求都会创建全新的控制器实例,你定义的OrderDetailsModel orderdetails = new();类字段,在Index方法初始化后,到UpdatePage请求时已经是新实例,无法保留之前的数据。
  2. 视图返回逻辑不符合预期:UpdatePage方法返回View(orderdetails)会默认加载UpdatePage.cshtml视图,而你需要的是重渲染Index视图。

修正步骤

1. 重构控制器,移除类级模型字段

将模型状态管理改为方法内处理,通过重定向传递分页参数,同时避免重复提交问题:

public class OrderdetailsController : Controller
{
    private readonly ILogger<OrderdetailsController> _logger;
    private readonly IOrderDetailsRepository _orderdetailsrepository;

    public OrderdetailsController(ILogger<OrderdetailsController> logger, IOrderDetailsRepository orderrepository)
    {
        _logger = logger;
        _orderdetailsrepository = orderrepository;
    }

    public IActionResult Index(int? page)
    {
        var orderDetails = _orderdetailsrepository.GetOrderDetails();
        var model = new OrderDetailsModel(orderDetails);
        if (page.HasValue)
        {
            model.ItemsToShow = page.Value;
        }
        return View(model);
    }

    [HttpPost]
    public IActionResult UpdatePage(int button)
    {
        return RedirectToAction(nameof(Index), new { page = button });
    }

    [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
    public IActionResult Error()
    {
        return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
    }
}

2. 调整视图表单与循环逻辑

修正分页按钮的循环条件(原逻辑会遗漏最后一页按钮),并确保表单指向正确的Action:

<div class="text-center">
    <form method="post" asp-action="UpdatePage">
        @{ 
            var ordernumbers = Model.OrderDetail.Count();
            var buttonnumber = ordernumbers <= 1 ? 0 : (ordernumbers / 100) + 1;

            if (buttonnumber > 0)
            {
                for (int i = 1; i <= buttonnumber; i++)
                {
                    <input type="submit" name="button" value="@i" 
                           class="btn btn-primary text-center" aria-pressed="true" />
                }
            }
        }
    </form>
</div>

3. 关键说明

  • 采用RedirectToAction遵循Post/Redirect/Get设计模式,避免用户刷新页面重复提交表单。
  • 每次请求从仓储重新获取数据并应用分页参数,保证数据一致性,不再依赖类级字段存储状态。
  • 修正循环条件后会完整渲染所有分页按钮,解决原逻辑遗漏最后一页的问题。

内容的提问来源于stack exchange,提问作者Mariusz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 07:27:14