ASP.Net MVC如何在控制器Index()中访问隐藏字段?

3

我有几个视图含有以下形式的隐藏字段:

<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中无法工作。我花了几个小时查找,但找不到任何相关信息。我只能找到如何访问POST到控制器的隐藏值,但没有关于视图控制器首次呈现时的信息。

非常感谢您提供帮助!


我看不出这是怎么可能的。Request.Form值是在POSTBACK期间传递的,而这不是控制器构造方法中发生的事情。 - Jason Evans
5个回答

5

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

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

如安德里所述,在Asp.Net MVC中不需要runat="server"

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)
[...]

3
像这样的回答是没有帮助的。显然,提问者正在挣扎,而且是的 - 她/他应该使用MVC范例。但与其说这就是我们如何在MVC中做到的,不如帮助弥合知识差距。这个答案(在我看来)只会使事情更加模糊。 - darlirium

1

给你的操作添加参数,它将自动映射:

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

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


0

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


0

要在控制器操作方法中访问任何表单控件,首先要检查该元素是否包含在表单标记中。


这应该是一个注释。 - ρяσѕρєя K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接