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

如何在ActionMethod中返回弹窗而非视图?

实现重复登机信息的弹窗提示替代单独视图

要把原来跳转至RecordDublicate视图的逻辑,改成在CheckIn表单页面直接显示弹窗提示,我们需要修改后端Action逻辑和前端视图两部分,具体步骤如下:


1. 修改后端ActionMethod逻辑

原来的代码检测到重复记录时直接返回独立视图,现在我们要改为返回CheckIn视图,同时携带错误提示信息,还要保留用户已填写的表单数据,并且重新填充下拉框所需的ViewBag数据(否则返回视图时下拉框会为空)。

修改后的CheckIn Action代码:

public ActionResult CheckIn(PassengerInfo Data)
{
    if (!General.ValidateSession())
    {
        return RedirectToAction("Login", "User");
    }

    // 重新填充下拉框数据,返回视图时需要这些数据渲染下拉选项
    ViewBag.FlightNoList = repository.GetFlightNos(); // 替换成你项目中获取FlightNoList的实际方法
    ViewBag.Passcategory = repository.GetPassengerCategories(); // 替换成获取乘客分类的实际方法

    if (!(ModelState.IsValid))
    {
        ViewBag.Message = "Form Data is Invalid";
        return View(Data); // 返回当前视图并保留用户已填表单数据
    }

    if (Data.NoOfGuests == null)
    {
        Data.NoOfGuests = "0";
    }
    if (Data.Remarks == null)
    {
        Data.Remarks = "No Comments";
    }
    if(Data.RefSeatNo==null)
    {
        Data.RefSeatNo = "No Reference";
    }

    Data.CheckinTime = DateTime.Now.ToString("hh:mm:ss tt");
    Data.CheckoutTime = null;
    Data.IsCheckout = false;
    Data.isFeedBack = false;
    Data.EnterBy = Session["UserName"].ToString();
    Data.Date = DateTime.Now.ToString("yyyy-MM-dd");

    var result = repository.SearchDublicate(Data.SequenceNo, Data.FlightId, Data.Date);
    if(result >= 1)
    {
        // 传递重复提示消息,而非跳转至独立视图
        ViewBag.DuplicateMessage = "该乘客已办理登机";
        return View(Data); // 返回CheckIn视图并保留用户输入的表单数据
    }

    repository.AddRecord(Data);
    repository.SaveRecord();
    return RedirectToAction("Scaning");
}

注意:请确保GetFlightNos()和GetPassengerCategories()与你原本填充ViewBag.FlightNoList、ViewBag.Passcategory的逻辑一致,替换成项目中实际获取下拉数据的方法。


2. 修改CheckIn前端视图,添加弹窗提示

我们可以用Bootstrap模态框(你的项目引用了_Layout.cshtml,通常这类项目会集成Bootstrap)实现弹窗,在视图中添加弹窗HTML,并通过JS判断是否存在重复消息来自动触发弹窗。

修改后的CheckIn视图(添加弹窗及相关JS):

@model Marhaba.Models.PassengerInfo 
@{ 
    ViewBag.Title = "CheckIn"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
    var FlightNoList = ViewBag.FlightNoList as IEnumerable<SelectListItem>; 
    var category = ViewBag.Passcategory as IEnumerable<SelectListItem>; 
} 

<!-- 重复提示弹窗 -->
<div class="modal fade" id="duplicateModal" tabindex="-1" role="dialog" aria-labelledby="duplicateModalLabel" aria-hidden="true">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title" id="duplicateModalLabel">提示</h5>
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                </button>
            </div>
            <div class="modal-body">
                @ViewBag.DuplicateMessage
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-primary" data-dismiss="modal">确定</button>
            </div>
        </div>
    </div>
</div>

<section id="contact-us-section" class="contact-us-section pb-30 image-bg">
    <!-- 原表单代码保持不变,此处省略重复代码 -->
    ...
</section>

<!-- 页面加载时检查并显示弹窗 -->
<script>
    $(document).ready(function() {
        var duplicateMsg = '@Html.Raw(ViewBag.DuplicateMessage)';
        if (duplicateMsg && duplicateMsg.trim() !== '') {
            $('#duplicateModal').modal('show');
        }
    });

    // 保留原有逻辑函数
    function valueChanged() {
        var checkBox = document.getElementById("Check");
        var guestsNo = document.getElementById("GuestsNo");
        guestsNo.style.display = checkBox.checked ? "block" : "none";
    }
</script>

说明:

  • 如果项目未集成Bootstrap,也可以自定义弹窗样式(比如固定定位的div),核心逻辑是通过JS判断ViewBag.DuplicateMessage是否存在,存在则显示弹窗。
  • @Html.Raw()用于确保提示文本正确渲染,避免HTML编码导致的显示问题。

3. 可选:清理冗余视图

现在RecordDublicate视图已不再使用,你可以选择删除它,或者保留作为备用。

修改完成后,用户提交重复乘客信息时,页面不会跳转,而是停留在CheckIn表单页自动弹出提示弹窗,同时用户之前填写的表单数据会被保留,提升整体用户体验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:04:03