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

ASP.NET MVC如何将PartialView中设置的值传递到控制器

问题根因

你在PartialView的服务端代码中声明ContactForm对象并赋值Message属性的操作,仅发生在服务端渲染视图阶段,该值仅存在于服务端临时上下文,没有被渲染为前端表单可提交的元素。浏览器提交表单时只会携带页面中<input>、<textarea>、<select>等表单标签的内容,因此控制器无法获取到未输出到页面的Message值。

解决方案

最常用的实现方式是将Message值渲染为表单隐藏域,提交时自动跟随表单参数传递到控制器,操作步骤如下:

  1. 调整你的PartialView代码,在赋值后添加隐藏域绑定:
@{ 
    Layout = "master.cshtml"; 
    ContactForm form= new ContactForm(); 
    form.Message = "Thank you, we shall be in touch"; 
}
<!-- 新增隐藏域,name属性需和模型的Message属性名完全匹配,保证模型绑定正常识别 -->
@Html.Hidden("Message", form.Message)

如果你的主表单已经强类型绑定了ContactForm模型,无需在PartialView中单独实例化对象,直接复用外层模型即可,代码可以简化为:

@model ContactForm
@{ 
    Layout = "master.cshtml"; 
    Model.Message = "Thank you, we shall be in touch"; 
}
@Html.HiddenFor(m => m.Message)

额外说明

  • 你对ViewBag的理解是正确的,它是控制器向视图传递临时数据的容器,无法实现视图向控制器的反向数据传递,视图到控制器的传值只能通过表单提交、路由参数、QueryString等前端发起请求时携带的参数实现。
  • 如果需要适配不同表单的差异化Message需求,也可以在渲染PartialView时通过ViewData传递自定义值,避免每个PartialView硬编码内容,灵活性更高:
    主视图渲染PartialView时传入参数:
    @Html.Partial("ContactFormPartial", new ViewDataDictionary { {"CustomMessage", "表单A的提示文案"} })
    
    PartialView中读取参数绑定:
    @Html.Hidden("Message", ViewData["CustomMessage"])
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:36:04