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
}
}