MVC Razor中如何在Razor代码内读取隐藏字段的值
解决方案
由于Razor是服务器端渲染机制,页面加载时Html.RenderPartial()就已执行完毕,无法直接在Razor代码中动态获取用户点击触发时的"最近隐藏字段值"(因为此时服务器不知道用户后续会操作哪一行)。针对你页面存在多个同名不同值隐藏字段、对话框由表格行点击触发的场景,推荐通过前端JavaScript动态获取+传递值的方式实现,具体步骤如下:
1. 调整表格行与触发元素结构
确保触发对话框的按钮和目标隐藏字段处于同一表格行内,方便通过DOM关系定位:
<table> <tr> <td><button class="open-dialog-btn">打开对话框</button></td> <td><input type="hidden" name="bob" value="123" class="bobsname" /></td> </tr> <tr> <td><button class="open-dialog-btn">打开对话框</button></td> <td><input type="hidden" name="bob" value="456" class="bobsname" /></td> </tr> </table>
2. 修改对话框PartialView(SomeDialog.cshtml)
预留用于接收值的元素,若需提交到服务器可增加隐藏字段:
<div id="SomeDialog" style="display: none;"> <!-- 显示用的元素 --> <p>当前Bob值:<span id="bob-value-display"></span></p> <!-- 提交用的隐藏字段(如果需要提交到服务器) --> <input type="hidden" id="dialog-bob-value" name="DialogBobValue" /> <!-- 其他对话框内容 --> </div>
3. 编写JavaScript点击事件逻辑
在用户点击按钮时,通过DOM层级关系定位当前行的目标隐藏字段,将值传递给对话框:
$(document).ready(function() { $('.open-dialog-btn').on('click', function() { // 1. 找到当前按钮所在行的隐藏字段 var currentBobValue = $(this).closest('tr').find('.bobsname').val(); // 2. 更新对话框内的显示元素和提交字段 $('#bob-value-display').text(currentBobValue); $('#dialog-bob-value').val(currentBobValue); // 3. 显示对话框 $('#SomeDialog').show(); }); });
补充说明(服务器端动态渲染方案)
如果你的对话框需要服务器端动态渲染内容(而非提前RenderPartial),可以改用AJAX请求:
- 点击按钮时获取隐藏字段值,通过AJAX传递给后端Action
- Action将值存入
ViewData或返回模型,再返回PartialView - 前端将返回的PartialView内容插入页面并显示
示例代码:
$('.open-dialog-btn').on('click', function() { var bobValue = $(this).closest('tr').find('.bobsname').val(); $.ajax({ url: '@Url.Action("LoadSomeDialog")', type: 'GET', data: { bobKey: bobValue }, success: function(result) { // 插入对话框内容并显示 $('#dialog-container').html(result).show(); } }); });
后端Action:
public ActionResult LoadSomeDialog(string bobKey) { ViewData.Add("BobKey", bobKey); return PartialView("SomeDialog"); }
内容的提问来源于stack exchange,提问作者AndyW
相关产品推荐
相关产品推荐

