隐藏变量值可以在MVC中的控制器中访问

时间:2010-06-23 07:42:26

标签: javascript asp.net-mvc hidden-field

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

2 个答案:

答案 0 :(得分:3)

将数据发布到Controller时,可以发布整个表单的内容(包括隐藏字段)。隐藏字段的目的是将其隐藏在客户端中,而不是在将数据发送到服务器时。表单数据打包在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...
}

答案 1 :(得分: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);
}

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