ASP.Net MVC如何访问控制器上的隐藏字段索引()

时间:2013-12-13 07:12:47

标签: c# asp.net-mvc hiddenfield

我有几个视图有这样的隐藏字段:

<input type="hidden" runat="server" id="hiddenTab" value="1"/>

每个视图可能有不同的值。

我有一个基本控制器,我希望能够在构造函数上访问此值:

Public Class BaseController: Controller
{
    public BaseController()
    {
        string tabid = Request.Form["hiddenTab"];
    }
}

最后我有几个控制器来实现这个基本控制器:

public class HomeController : BaseController
{
    public ActionResult Index()
    { 
       string tabid = Request.Form["hiddenTab"];

       //if tabid = 1, do this.. if it is 2, do this, etc...
    }
}

首次加载控制器时,如何访问视图中的隐藏字段值或任何其他控件的值?该应用程序刚刚开始,所以尚未发布任何内容。我试图从控制器和基本控制器访问该值,并且Request.Form中没有值。

我正在将一个应用程序从aspx转换为MVC,而在aspx应用程序上,主页代码隐藏有这个:

 HtmlInputHidden hidddentabid;
 hidddentabid = (HtmlInputHidden)Body.FindControl("hiddenTab");

这适用于aspx中的母版页,但不适用于MVC。我花了几个小时看,却找不到任何相关内容。我能找到的就是如何访问POSTED到控制器的隐藏值。首次渲染视图的控制器时没有任何操作。

非常感谢任何帮助!

5 个答案:

答案 0 :(得分:4)

您缺少隐藏元素的name属性。您可以根据名称获取值。试试这个

<input type="hidden" id="hiddenTab" name="hiddenTab"  value="1"/>

正如Andrie所说,Asp.Net MVC中不需要runat="server"

答案 1 :(得分:4)

在MVC ASP.NET下使用Model,读取你没有使用MVC范例的代码!使用MVC的最佳方法是在模型中加入适当的方法,在视图中引用模型,并在操作的后期将该模型放入操作的参数中,如

[HttpPost]
public ActionResult Index(Modelpage model){...}

模型

public class Modelpage {
    public int hiddenTab {get;set;}
}
视图中的

[...]
@Html.HiddenFor(m=>m.hiddenTab)
[...]

答案 2 :(得分:1)

为您的操作添加参数,它将自动映射:

public ActionResult Index(int hiddenTab)
{ 
   //Do smth...
}

RUNAT =&#34;服务器&#34; - 此属性适用于传统ASPX页面。如果您使用的是ASP.NET MVC View Engine,则不需要这样做。

答案 3 :(得分:0)

具有name属性的html控件只能使用request.form对象访问,对此,隐藏字段或任何控件都应该是表单。

答案 4 :(得分:0)

用于访问控制器操作方法中的任何表单控件,首先检查表单标记中是否包含相同的元素。