![](/img/trans.png)
[英]Rendering a view with HtmlHelper and Partial Page in ASP.Net MVC3
[英]MVC3 Partial view inside Master Page
在我的网站上,我想在所有页面上显示一个“登录”框。 因此,我想制作一个局部视图页面,该页面将用于共享的_Layout.cshtml文件中。
但是这个局部视图的控制器会去哪儿呢? 我的“登录”按钮将如何访问它?
因此,当Request.IsAuthenticated为true时,登录框将显示“ Logging as ...”,但结果为false时,我会得到一个带有通常的Username / Password形式的小表。
编辑:在尝试了以下一些答案之后,我似乎陷入了下面的GET方法的无休止的困境。 这是因为我的局部视图正试图加载_Layout.cshtml文件,因为它想让“母版页”与局部视图相对应? 而且由于我的局部视图是在_Layout.cshtml中呈现的,因此变得不完整了吗?
public class LoginController : Controller
{
//
// GET: /Login/
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(LoginModel loginModel)
{
if(ModelState.IsValid)
{
var g = new GallaryImage();
var user = g.LoginUser(loginModel.Username, loginModel.Password);
if(user != null)
{
FormsAuthentication.SetAuthCookie(user.username, false);
return RedirectToAction("index", "Home");
}
ModelState.AddModelError("", "Invalid Username/Password");
}
return View();
}
在我的_Layout.cshtml中,我试图像这样加载部分视图:
<div style="text-align: right">
@Html.Action("Index", "Login")
</div>
看到问题了吗?
您可以将控制器名称作为属性赋予Html.Action
方法
Html.Action("ActionName", "ControllerName")
如果使用Razor语法,则必须在视图中编写@Html.Action("ActionName", "ControllerName")
,并且名称为ActionName
的Action应该返回PartialView(将是您的登录区域)。
仅供参考,视图没有控制器。 控制器具有视图。 这种区别似乎微妙,但事实并非如此。 一个视图可以被任意数量的控制器使用,而视图并不关心或不知道控制器。 因此,您必须考虑当前的URL,即当前的操作方法。
如果您是部分登录,则从Controller那里不需要太多。 它直接访问页面的User属性以查找其是否已通过身份验证。 您的登录按钮只是一种表单,其操作方法设置为帐户控制器的登录方法。
甚至用户名也可以从页面的“用户”属性中显示。
只需查看创建新的Internet项目时生成的默认MVC应用。 它已经实现了所有这些功能。 只需复制即可。
尝试使用HTML.RenderAction("Action", "Controller")
并确保您没有从局部视图中调用母版页。 这有可能产生回路。
我正在使用MVC 3 ASPX
视图引擎,而不是剃刀。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.