在ASP.NET Core中如何通过ID将Offer数据传递至Order表单?
实现指定ID的Offers数据填充到Order表单只读字段
步骤1:修改Get请求的Order控制器方法
首先要从数据库获取指定ID的Offers数据,初始化Order模型并填充对应的只读字段,再传递给视图。假设使用EF Core,需注入DbContext实例:
private readonly YourDbContext _context; // 构造函数注入DbContext public YourController(YourDbContext context) { _context = context; } public IActionResult Order(int id) { // 根据ID查询对应Offers数据 var targetOffer = _context.Offers.Find(id); if (targetOffer == null) { return NotFound(); // 未找到对应Offer时返回404 } // 初始化Order模型,填充只读字段 var orderModel = new Order { offer_Name = targetOffer.Offers_name, Price = targetOffer.Price }; return View(orderModel); }
步骤2:修正Order视图的字段映射
注意Order实体类中对应的字段是offer_Name,需修正视图中的asp-for属性,同时保持只读状态:
<input asp-for="FullName" /> <span asp-validation-for="FullName" class="text-danger"></span> <input asp-for="PhoneNumber" /> <span asp-validation-for="PhoneNumber" class="text-danger"></span> <input asp-for="Price" readonly /> <input asp-for="offer_Name" readonly />
步骤3:完善Post请求的控制器方法
Post方法接收Order模型,验证通过后保存到数据库:
[HttpPost] [ValidateAntiForgeryToken] // 建议添加防伪令牌提升安全性 public IActionResult Order(Order order) { if (ModelState.IsValid) { _context.Orders.Add(order); _context.SaveChanges(); return RedirectToAction(nameof(Index)); // 保存成功后跳转到订单列表或指定页面 } // 验证失败时返回视图,保留用户已输入内容 return View(order); }
额外注意事项
- 确保DbContext中已正确配置
Offers和Order的DbSet:public DbSet<Offers> Offers { get; set; } public DbSet<Order> Orders { get; set; } - 若需关联订单与对应Offer,可在Order实体类中添加关联字段:
public int OffersId { get; set; } [ForeignKey(nameof(OffersId))] public Offers? RelatedOffer { get; set; }
内容的提问来源于stack exchange,提问作者عالم ديم
相关产品推荐
相关产品推荐

