0

如果隐藏变量的值是在 javascript 中设置的,我们可以访问控制器 ActionResult 中的隐藏变量值吗?

4

2 回答 2

3

当您将数据发布到控制器时,可以发布整个表单的内容(包括隐藏字段)。隐藏字段的目的是将其隐藏在客户端中,而不是在将其数据发送到服务器时。表单数据被打包在一个 POST 中并发送到服务器,不管它是如何填充的,所以你可以使用 JQuery 来填充字段就好了......

鉴于这种形式:

<% Html.BeginForm(); %>
  <input type="hidden" id="catID" name="catID" />
<% Html.EndForm(); %>

您可以将其作为路由参数处理:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult DoSomething(string catID)
{
  // Do stuff here...
}

或者,作为 FormCollection 实例的一项:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult DoSomething(FormCollection form)
{
  string catID = form["catID"];

  // Do stuff here...
}

甚至作为输入模型:

public class MyInputModel
{
  public string catID;
}

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult DoSomething(MyInputModel input)
{
  string catID = input.catID;

  // Do stuff here...
}
于 2010-06-23T07:56:20.853 回答
1

如果您指的是 ASP.NET MVC,并且您提到的隐藏变量实际上是正在发布到控制器的表单中的隐藏字段,那么答案是肯定的。

这是我编写的应用程序中的常见模式。例如,假设您正在编辑一个人的详细信息。您填写的表格将包含姓名、年龄等内容的可见字段 - 但还需要有一个隐藏字段,其中包含您正在为其编辑详细信息的人的 ID。

如果这是您正在使用的场景,那么控制器可以使用隐藏字段,其方式与姓名和年龄字段相同。

编辑:除了您随后的评论,您似乎指的是 javascript 变量。如果是这种情况,那么控制器不能直接使用这些 - 但可以通过将变量插入表单来进行安排。

//Javaacript
var myVariable = calculateSomeValue();
$("#myFormField").val(myVariable);
...
//HTML
<form action="..." method="post">
    <input type="hidden" name="myFormField" id="myFormField"/>
    ...
</form>
...
//Controller code
ActionResult MyControllerAction(string myFormField, ...){
    DoSomethingWith(myFormField);
}

如果这没有帮助,您可以发布一些示例代码吗?

于 2010-06-23T07:55:52.170 回答