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

ASP.NET MVC中数据成功插入后如何传递用户输入数据至printRegInfo.cshtml页面展示

解决ASP.NET MVC插入数据后跳转展示信息的问题

没问题,我来给你梳理下怎么实现这个需求。你现在需要在数据成功插入数据库后,跳转到printRegInfo.cshtml页面展示用户输入的Name、PropName、Address信息,这里有两种常用且规范的方式,都能解决你的问题,同时遵循MVC的PRG(Post/Redirect/Get)模式,避免用户刷新页面重复提交表单:

方式一:通过RedirectToAction传递参数(URL传参)

这种方式直接将需要展示的信息作为路由参数传递,适合非敏感数据的场景。

1. 修改Create Action代码

在数据保存成功后,替换原来的return View();,改为跳转到专门的展示Action并传递参数:

public ActionResult Create(FirmServiceRegistrationViewModel firmServiceReg) {
    try {
        ViewBag.ServiceId = new SelectList(db.ServicesModels, "ServiceId", "ServiceName");
        if (ModelState.IsValid) {
            FirmsModel frm_ = new FirmsModel();
            frm_.Name = firmServiceReg.Name;
            frm_.PropName = firmServiceReg.PropName;
            frm_.Address = firmServiceReg.Address;
            db.FirmsModels.Add(frm_);
            db.SaveChanges();
            int frmId = frm_.FirmId;
            FirmServiceRegistrationModel frmServReg = new FirmServiceRegistrationModel();
            frmServReg.ServiceId_ = firmServiceReg.ServiceId;
            frmServReg.FirmId_ = frmId;
            db.FirmServiceRegistrationModels.Add(frmServReg);
            db.SaveChanges();

            // 数据插入成功,跳转到PrintRegInfo并传递参数
            return RedirectToAction("PrintRegInfo", new { 
                name = firmServiceReg.Name, 
                propName = firmServiceReg.PropName, 
                address = firmServiceReg.Address 
            });
        }
        return View();
    } catch (Exception) {
        throw;
    }
}

2. 创建PrintRegInfo Action

在同一个Controller中添加接收参数并传递给View的Action:

public ActionResult PrintRegInfo(string name, string propName, string address) {
    // 将参数封装到ViewModel(复用你已有的FirmServiceRegistrationViewModel即可)
    var viewModel = new FirmServiceRegistrationViewModel {
        Name = name,
        PropName = propName,
        Address = address
    };
    return View("printRegInfo", viewModel);
}

3. 修改printRegInfo.cshtml页面

使用强类型ViewModel绑定数据,展示信息:

@model YourProjectNamespace.FirmServiceRegistrationViewModel

<h2>注册成功信息</h2>
<div class="reg-info">
    <p><strong>公司名称:</strong> @Model.Name</p>
    <p><strong>负责人姓名:</strong> @Model.PropName</p>
    <p><strong>公司地址:</strong> @Model.Address</p>
</div>

方式二:使用TempData存储数据(无URL暴露)

如果不想让信息出现在URL中,适合敏感数据的场景,可以用TempData临时存储数据(它会保留到下一次请求结束)。

1. 修改Create Action代码

数据保存成功后,将信息存入TempData再跳转:

public ActionResult Create(FirmServiceRegistrationViewModel firmServiceReg) {
    try {
        ViewBag.ServiceId = new SelectList(db.ServicesModels, "ServiceId", "ServiceName");
        if (ModelState.IsValid) {
            // 省略数据保存代码(和你原来的一致)

            // 将信息存入TempData
            TempData["FirmName"] = firmServiceReg.Name;
            TempData["PropName"] = firmServiceReg.PropName;
            TempData["Address"] = firmServiceReg.Address;

            return RedirectToAction("PrintRegInfo");
        }
        return View();
    } catch (Exception) {
        throw;
    }
}

2. 修改PrintRegInfo Action

从TempData中取出数据并传递给View:

public ActionResult PrintRegInfo() {
    var viewModel = new FirmServiceRegistrationViewModel {
        Name = TempData["FirmName"] as string,
        PropName = TempData["PropName"] as string,
        Address = TempData["Address"] as string
    };
    return View("printRegInfo", viewModel);
}

3. View页面和方式一完全相同

直接复用方式一的printRegInfo.cshtml即可。

注意事项

  • 为什么不直接返回View("printRegInfo", viewModel)?因为如果用户刷新页面,会重新执行Create的POST请求,导致重复插入数据,而RedirectToAction会发起新的GET请求,避免这个问题。
  • 如果你没有专门的FirmServiceRegistrationViewModel,也可以直接传递单个参数或者自定义一个简单的ViewModel来封装这三个字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 04:57:39