Asp.net mvc 4 Asp.net MVC4,控制器构造函数

Asp.net mvc 4 Asp.net MVC4,控制器构造函数,asp.net-mvc-4,Asp.net Mvc 4,当我运行上面的代码时,我得到了这个错误 public class CheckoutController : Controller { string userID; public CheckoutController() { userID = User.Identity.Name; } ... } 在那个类中,大多数方法都需要那个userID,所以我想在构造函数中定义那个值,我如何解决这个问题 [编辑] **Make sure that

当我运行上面的代码时,我得到了这个错误

public class CheckoutController : Controller
{
    string userID;

    public CheckoutController()
    {
        userID = User.Identity.Name;
    }
    ...
}
在那个类中,大多数方法都需要那个userID,所以我想在构造函数中定义那个值,我如何解决这个问题

[编辑]

**Make sure that the controller has a parameterless public constructor.**

此代码工作正常,没有错误。

执行管道相关值(
请求
响应
,和
用户
)仅在
控制器
的构造函数方法之后绑定。这就是为什么您不能使用
User.Identity
,因为它还没有绑定。只有在步骤3之后:
IController.Execute()
才会初始化这些上下文值

更新海报:。但我在这里保留了较旧的可嵌入图像,以使其更易于引用

User.Identity.Name
不会对性能产生负面影响,因为它已经由ASP.NET运行时从
FormsAuthentication
cookie中解密(假设您正在为web应用程序使用
FormsAuthentication

因此,不要麻烦将其缓存到类成员变量中

公共类签出控制器:控制器
{
public CheckoutController(){/*保持原样*/}
公共行动结果索引()
{
//就这样用吧
字符串userName=User.Identity.Name;
返回视图();
}
}

执行管道相关值(
请求
响应
,和
用户
)仅在
控制器的构造函数方法之后绑定。这就是为什么您不能使用
User.Identity
,因为它还没有绑定。只有在步骤3之后:
IController.Execute()
才会初始化这些上下文值

更新海报:。但我在这里保留了较旧的可嵌入图像,以使其更易于引用

User.Identity.Name
不会对性能产生负面影响,因为它已经由ASP.NET运行时从
FormsAuthentication
cookie中解密(假设您正在为web应用程序使用
FormsAuthentication

因此,不要麻烦将其缓存到类成员变量中

公共类签出控制器:控制器
{
public CheckoutController(){/*保持原样*/}
公共行动结果索引()
{
//就这样用吧
字符串userName=User.Identity.Name;
返回视图();
}
}

您确定这就是路由正在调用的控制器吗?看起来您已经有了一个无参数构造函数。如果有,您最近重建过代码吗?它可能已经过时了…@Expert因为它是现成的,只有无参数构造函数才能工作
public CheckoutController()
,但是您想使用
public CheckoutController(int userId)
?您发布的代码没有问题。显然,问题出在其他地方,或者您正在使用旧代码。您确定这就是路由正在调用的控制器吗?看起来您已经有了一个无参数构造函数。如果有,您最近重建过代码吗?它可能已经过时了…@Expert因为它是现成的,只有无参数构造函数才能工作
public CheckoutController()
,但是您想使用
public CheckoutController(int userId)
?您发布的代码没有问题。很明显,问题出在其他地方,或者您正在使用旧代码。仅供参考,该图表已经过时,我认为这是针对MVC1的CTP1之前版本,之后情况发生了很大变化。这里有一个更好的,谢谢你们。另外,为了提供更好的链接,我提交了一个编辑。以防万一:仅供参考,这张图表已经过时了,我想它是针对MVC1的CTP1之前,之后情况发生了很大变化。这里有一个更好的,谢谢你们。另外,为了提供更好的链接,我提交了一个编辑。以防万一:
public class CheckoutController : Controller
{
    string userID;

    public CheckoutController()
    {
      //None
    }
}