2

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

<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。我花了几个小时寻找,但找不到任何东西。我所能找到的只是如何访问发布到控制器的隐藏值。首次呈现视图的控制器时没有任何内容。

任何帮助将不胜感激!

4

5 回答 5

5

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

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

正如安德烈提到runat="server"的,在 Asp.Net MVC 中不需要

于 2013-12-13T08:56:37.810 回答
4

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

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

该模型

public class Modelpage {
    public int hiddenTab {get;set;}
}

在视图中

[...]
@Html.HiddenFor(m=>m.hiddenTab)
[...]
于 2013-12-13T09:01:00.310 回答
1

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

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

runat="server" - 此属性适用于经典 ASPX 页面。如果您使用的是 ASP.NET MVC 视图引擎,则不需要这个。

于 2013-12-13T08:50:32.887 回答
0

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

于 2016-05-26T12:08:36.930 回答
0

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

于 2016-05-26T12:32:21.080 回答