所以我成功实现了帐户控制器及其附带的各种方法。我有一个特定的方法返回AppUser(当前用户)
public AppUser GetCurrentUser(){
AppUser user = UserMenager.FindById(User.Identity.GetUserId());
return user; }.
现在我不想在我的所有控制器中都有UserMenager的实例(或者我应该?),所以在我的HomeController中我需要根据用户是否登录来渲染局部视图,所以我称之为方法
public ActionResult RightNavigation()
{
// account is instance of AccountController
AppUser user = account.GetCurrentUser();
if (user == null)
{
return PartialView("NavWhenNotLogged");
}
else
{
return PartialView("NavWhenLogged",user);
}
}
问题是,我在Account Controller中的UserMenager实例得到NullException:
private AppUserMenager UserMenager
{
get
{
return HttpContext.GetOwinContext().GetUserManager<AppUserMenager>();
}
}
现在我认为这不是在不同控制器中“共享”UserMenager的正确方法,所以如果你能给我''这种方式'。
总结:我的帐户控制器有各种关于用户等的方法。当我尝试使用其中一种依赖于UserMenager的方法时,我得到UserMenager的Null Exception。
答案 0 :(得分:2)
在Startup类中,您需要在Configuration方法中调用以下行,该方法将ApplicationUserManager的实例放入OwinContext中以用于每个请求。
INSERT INTO mytable SET `block_column` = 123;
SELECT `blob_column` FROM `mytable`
UserManager.Create()是一个返回实例的静态方法。
不要从另一个控制器呼叫控制器。要获取UserManager,您可以在任何控制器的操作中执行此操作:
public void Configuration(IAppBuilder app)
{
app.CreatePerOwinContext<UserManager>(UserManager.Create);
}
答案 1 :(得分:0)
#include <glut.h>
/*
System Info
-------------
OS: Win7 professional 64-bit SP1
CPU: Intel i3-4170 @ 3.70GHz
GPU: HD Graphics 4400
*/
void display(void) {
// 20541 ok, 20542 not visible
// 30320 ok, 30321 not visible
const GLfloat z = 20541;
const GLfloat far = 1000, near = 0.1;
GLfloat vertices[4 * 3] = {
-far, -far, z - far,
far, far, z - far,
};
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0, 0, z, 0, 0, z - 1, 0, 1, 0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-0.1, 0.1, -0.1, 0.1, near, far);
glColor3f(0, 1, 1); // blue
glBegin(GL_LINES);
glVertex3f(vertices[0], vertices[1], vertices[2]);
glVertex3f(vertices[3], vertices[4], vertices[5]);
glEnd();
glFlush();
}
int main() {
glutCreateWindow("");
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
在默认的MVC5项目中,如果用户是否登录_LoginPartial.cshtml,则会进行样本检查。