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

Razor Pages(C#)CRUD操作中跳转至编辑页的实现方法

在Razor Pages中实现编辑页跳转与数据加载

一、前端跳转逻辑(你当前的代码已正确实现)

你提供的<a>标签已经完成了跳转至编辑页的核心功能:

  • asp-page="\Book\Edit":指定目标编辑页的路径(确保路径与项目结构一致,比如Book是文件夹、Edit.cshtml在其中时,该路径有效)
  • asp-route-id="@item.BookID":将需要编辑的图书ID作为路由参数传递给编辑页,后台可通过这个ID查询对应数据

对应的前端代码片段:

<a class="btn btn-warning btn-xs" asp-page="\Book\Edit" asp-route-id="@item.BookID" style="background-color: green; height: 29px; margin-top: -1px;"> 
    <i class="glyphicon glyphicon-edit"></i>
</a>

二、编辑页后台处理(加载待编辑数据)

要在编辑页显示待修改的数据,需在Edit.cshtml.cs中编写OnGet方法接收ID并查询数据:

  1. 模型类与后台逻辑示例
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.EntityFrameworkCore;
using System.Threading.Tasks;

public class EditModel : PageModel
{
    // 替换为你的项目数据库上下文
    private readonly AppDbContext _dbContext;

    public EditModel(AppDbContext dbContext)
    {
        _dbContext = dbContext;
    }

    // 启用SupportsGet=true,允许从GET请求的路由参数中绑定ID
    [BindProperty(SupportsGet = true)]
    public int Id { get; set; }

    // 存储待编辑的图书数据
    public Book Book { get; set; }

    // GET请求加载数据
    public async Task<IActionResult> OnGetAsync()
    {
        // 根据ID从数据库查询图书
        Book = await _dbContext.Books.FirstOrDefaultAsync(b => b.BookID == Id);

        if (Book == null)
        {
            // 未找到对应数据时返回404
            return NotFound();
        }

        return Page();
    }

    // POST请求提交修改(完成编辑功能必需)
    public async Task<IActionResult> OnPostAsync()
    {
        if (!ModelState.IsValid)
        {
            return Page();
        }

        // 更新数据库中的数据
        _dbContext.Attach(Book).State = EntityState.Modified;
        
        try
        {
            await _dbContext.SaveChangesAsync();
        }
        catch (DbUpdateConcurrencyException)
        {
            if (!BookExists(Id))
            {
                return NotFound();
            }
            throw;
        }

        // 保存后跳转回列表页
        return RedirectToPage("./Index");
    }

    // 检查图书是否存在
    private bool BookExists(int id)
    {
        return _dbContext.Books.Any(b => b.BookID == id);
    }
}

三、编辑页前端绑定数据

在Edit.cshtml中,通过模型绑定显示待编辑的数据,并构建提交表单:

@page
@model YourProjectNamespace.Book.EditModel

<h3>编辑图书信息</h3>

<form method="post">
    <!-- 隐藏域存储图书ID,提交时传递 -->
    <input type="hidden" asp-for="Book.BookID" />
    
    <div class="form-group">
        <label asp-for="Book.Title">书名</label>
        <input asp-for="Book.Title" class="form-control" />
        <span asp-validation-for="Book.Title" class="text-danger"></span>
    </div>
    
    <div class="form-group">
        <label asp-for="Book.Author">作者</label>
        <input asp-for="Book.Author" class="form-control" />
        <span asp-validation-for="Book.Author" class="text-danger"></span>
    </div>
    
    <!-- 其他需要编辑的字段 -->
    
    <button type="submit" class="btn btn-primary">保存修改</button>
    <a asp-page="./Index" class="btn btn-secondary">返回列表</a>
</form>

注意事项

  • 确保路由配置正确,Razor Pages默认支持/{Page}/{Handler}/{Id}的路由格式
  • 你的删除按钮使用GET方法存在安全风险,建议改为POST方法并添加防伪造令牌(@Html.AntiForgeryToken())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 23:30:19