Razor页面传递数据后,如何在第二个页面OnGet阶段显示数据?
问题解决方案
1. 修正Index页面的参数传递逻辑
原RedirectToPage中指定的路由名称"User"属于冗余配置,且需确保参数命名与Add页面接收方对应,修改如下:
// Index页面的OnPost方法 public IActionResult OnPost() { if (!ModelState.IsValid) { return Page(); } // 直接传递参数,参数名与Add页面属性匹配 return RedirectToPage("Add", new { Initials = User.Initials, EntryDate = User.EntryDate }); }
2. 调整Add页面的PageModel逻辑
移除不必要的[ViewData]属性(BindProperty已满足绑定需求),添加SupportsGet = true配置让属性能从GET请求参数中绑定值,优化后代码:
public class AddModel : PageModel { [BindProperty(SupportsGet = true)] // 允许从GET请求绑定参数 public DateTime EntryDate { get; set; } [BindProperty(SupportsGet = true)] public string Initials { get; set; } [BindProperty] public ItemModel Item { get; set; } [BindProperty] public UserModel User { get; set; } // 参数已通过BindProperty自动绑定,无需手动接收UserModel public void OnGet() { // 可保留必要初始化逻辑 } public async Task<IActionResult> OnPost() { if (!ModelState.IsValid) { return Page(); } Initials = User.Initials; EntryDate = User.EntryDate; ItemModel item = new ItemModel(); item.UserId = Initials; item.TransferDate = EntryDate; item.ItemNumber = Item.ItemNumber; item.FromLocation = Item.FromLocation; item.ToLocation = Item.ToLocation; item.Quantity = Item.Quantity; await item.InsertAsync(); return Page(); } }
3. 修正Add页面的HTML绑定
原HTML绑定的是嵌套User对象的属性,但OnGet阶段该对象未被赋值,需改为绑定PageModel自身的公开属性:
<div class="row"> <div class="col-md-4"> Initials: @Html.DisplayFor(model => model.Initials) <br /> Entry Date: @Html.DisplayFor(model => model.EntryDate) </div> </div>
核心说明
[BindProperty(SupportsGet = true)]:是OnGet阶段能从URL参数中获取值的关键配置,默认BindProperty仅支持POST请求绑定。- HTML绑定目标:必须指向PageModel直接暴露的属性,而非未初始化的嵌套对象。
内容的提问来源于stack exchange,提问作者Buck Hicks
相关产品推荐
相关产品推荐

