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

提交表单时如何获取当前视图对应的Action名称?

解决复用上传Action后重定向到原视图的问题

核心问题原因

你当前获取的routeValues["action"]是当前请求的Action(即UploadImage)——因为表单明确提交到这个Action,原视图的Action信息不会自动携带到新请求里,必须手动传递。

推荐解决方案:通过隐藏字段传递原Action名称

这是最可靠的方式,在每个使用上传表单的视图里,添加隐藏字段存储原视图对应的Action名称,提交时一起传到UploadImage方法。

1. 修改视图中的表单

在Html.BeginForm内部添加隐藏域,用ViewContext获取当前视图的Action名称:

@using (Html.BeginForm("UploadImage", "Patient", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <!-- 其他表单元素 -->
    @Html.Hidden("returnAction", ViewContext.RouteData.Values["action"].ToString())
    
    <input type="submit" value="上传图片" />
}

如果原视图可能属于不同Controller,还可以额外传递Controller名称:

@Html.Hidden("returnController", ViewContext.RouteData.Values["controller"].ToString())

2. 修改UploadImage Action接收参数并重定向

在Action方法中接收传递的returnAction(和可选的returnController),处理完上传后重定向到原Action:

public ActionResult UploadImage(HttpPostedFileBase imageUpload, PatientHomeViewModel model, string returnAction, string returnController = "Patient")
{
    // 执行图片上传逻辑(省略具体实现)
    
    // 重定向到原视图对应的Action
    return RedirectToAction(returnAction, returnController);
}

备选方案:通过Referrer解析原Action

如果不想修改视图,可以尝试从请求的Referrer头解析原页面的Action,但这种方式依赖浏览器发送Referrer,存在被用户禁用的风险,仅作为 fallback 方案:

public ActionResult UploadImage(HttpPostedFileBase imageUpload, PatientHomeViewModel model)
{
    // 上传逻辑...

    if (Request.UrlReferrer != null)
    {
        var context = new HttpContextWrapper(HttpContext);
        var routeData = RouteTable.Routes.GetRouteData(context);
        
        if (routeData?.Values.ContainsKey("action") == true)
        {
            var returnAction = routeData.Values["action"].ToString();
            var returnController = routeData.Values["controller"].ToString();
            return RedirectToAction(returnAction, returnController);
        }
    }

    // 如果Referrer无效,重定向到默认页面
    return RedirectToAction("Index", "Patient");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 11:40:31