我们可以在Layout.cshtml中添加模型吗?

时间:2016-08-11 23:41:46

标签: asp.net-mvc asp.net-mvc-3 linq-to-sql models

我有4页的布局,在标题我需要访问登录管理员的名称。如何在布局开始时在管理员中访问该数据库模型我添加了

var sdegree = 0;

$(window).scroll(function() {

sdegree ++ ;
sdegree = sdegree + 2 ;

var cwRotate = "rotate(" + sdegree + "deg)",
    ccwRotate = "rotate(" + (-1 * sdegree) + "deg)";

$(".move1").css({"-moz-transform" : cwRotate, "-webkit-transform" : cwRotate});
$(".move2").css({"-moz-transform" : ccwRotate, "-webkit-transform" : ccwRotate});

});

从管理员访问姓名时我正在写

    @model ProjectName.Models.Admin

它给出了错误,如何以正确的方式访问布局中的该属性,并且它不能是局部视图,它应该是布局,所以请帮助

3 个答案:

答案 0 :(得分:1)

正如@Stephen Muecke在他对你的问题的评论中所说,你可以通过更多方式做到这一点。我建议你保持你的布局视图没有模型。否则,正如@Stephen Muecke所提到的,你必须为使用相同或派生类型的布局的每个视图制作模型类型,这会给代码增加不必要的复杂性。

另一种方法是在您想要呈现用户名的位置在布局视图中调用HtmlHelper.Action(...)HtmlHelper.RenderAction()。例如:

布局页面:

...
<div class="admin-name">
    @{ Html.RenderAction("AdminName", "Partial"); }
</div>
...

添加控制器:

public class PartialController : Controller {
    [ChildActionOnly] // action cannot be requested directly via URL
    public ActionResult AdminName() {
        string adminName = ...; // assign value to adminName variable
        return Content(adminName);
    }
}

答案 1 :(得分:0)

您需要在应用程序中的这么多页面中登录用户详细信息,因此最好在Session 中存储登录的用户详细信息,并且您可以在任何视图/部分视图中检索会话值。

其他解决方案:

使标题部分视图并从布局

调用
Html.RenderAction("actionName", "controllerName")

答案 2 :(得分:0)

在控制器中创建一个返回部分视图的操作方法

控制器操作方法

[HttpGet]
public ActionResult Header()
{
    HeaderModel HM = new HeaderModel()
    // Your user information in HeaderModel
    return PartialView("Header", HM)
}

_layout.cshtml

<body>
    <div>
        @{Html.RenderAction("Header", "ControllerName");}
    </div>
</body>

我希望这能解决你的问题。