如何将隐藏字段值访问到私有方法中?
Posted
技术标签:
【中文标题】如何将隐藏字段值访问到私有方法中?【英文标题】:how to access hidden field value into private method? 【发布时间】:2019-04-03 15:20:28 【问题描述】:我在单击按钮上有 mvc 应用程序,我正在更改隐藏字段值,但我无法将 Request.Form["hiddenfield"]
用于私有方法,
有什么方法可以使用吗?
索引.cshtml
<input type="hidden" name="hiddenfield" id="hiddenfield" value="true">
<button type="button" id="stop" class="btn btn-success">
<script>
if ($('#stop'))
$('#stop').click(function (e)
document.getElementById('hiddenfield').value = "false";
);
</script>
HomeController.cs
在私有方法中,我想获得这个改变的值,我可以做其他事情。
private async Task Process()
//unable to get hidden value using var test= Request.Form["hiddenfield"];
因为它不是控制器方法。但是如何检查这个更改的隐藏字段值?
当按钮单击时,我无法调用任何 mvc 控制器方法,因为另一个执行已经在进行中,因此需要时间来点击方法。
【问题讨论】:
旁注,if ($('#stop'))
将永远为真。 $()
返回一个对象,对象是真实的。如果您正在检查是否存在,则需要将 .length
添加到其中,因为 0 是假的。但实际上你不需要那个条件。如果没有找到该元素,click()
将被忽略。
关于您的问题,您是否在网络控制台中检查了提交请求并验证了该请求中正在发送隐藏字段?
寻求调试帮助的问题必须包含所需的行为、特定问题或错误以及在问题本身中重现它所需的最短代码。请参阅:How to create a Minimal, Complete, and Verifiable example。目前,您还没有提供足够的代码来理解您在做什么,更不用说重现问题了。
【参考方案1】:
MVC 框架每个请求实例化一个控制器,并根据路由配置调用一个方法。
您可以在公共方法中调用私有方法并通过HttpContext.Current.Request
访问请求。
在第一个请求仍在运行时发出第二个请求应该没有任何问题,但它们将是同一控制器的不同实例。
【讨论】:
如何使用 HttpContext.Current.Request 检查隐藏字段值? HttpContext.Current.Request.Form 可能会起作用 - 很多如果和但是。您是否正在异步执行这些操作? 无法正常工作,出现构建错误“非静态字段需要对象引用”,是的第一个 while 循环正在异步工作。 HttpContext.Current 是每个线程的,您需要将请求部分作为参数传递给方法 听起来你的整体问题对于问答来说相当复杂。您可以尝试使用单例类来管理请求之间的状态。或者像 SignalR 这样的双向通信【参考方案2】:要查看服务器上的值,我会使用 Html 助手
@Html.HiddenFor(model => model.SomeId, new @id = "hfSomeId" )
或
@Html.Hidden("hfSomeId", someValue, new @id = "hfSomeId"
【讨论】:
【参考方案3】:您无法访问 MVC 中私有方法中的隐藏字段(据我所知)。
您需要在控制器中创建一个公共操作才能发布更新的值(隐藏字段)。然后,您可以从控制器操作中访问私有方法。
类似:
public ActionResult Update(bool hiddenField)
// do something with hiddenField and call private method Process()
【讨论】:
是的,但是在单击按钮后执行此方法需要时间:(因为在循环进行时其他进程正在进行.. 我认为问题是如何访问 MVC 私有方法中的隐藏字段。如果执行需要时间,那么听起来您需要对控制器使用异步调用,然后在完成后更新 UI。 谢谢我也可以在这里帮助我 - ***.com/questions/53045087/… 如果一个方法正在处理,如何立即调用另一个动作方法?以上是关于如何将隐藏字段值访问到私有方法中?的主要内容,如果未能解决你的问题,请参考以下文章