如果在javascript中设置隐藏变量的值,我们可以访问控制器的ActionResult中的隐藏变量值吗?
答案 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);
}
如果这没有帮助,你可以发布一些示例代码吗?