部分视图未使用RenderAction呈现

时间:2014-02-05 07:04:23

标签: c# asp.net-mvc razor

我希望在用户使用表单身份验证登录后,在页面的右上方显示一些用户详细信息。

登录信息在每个页面(布局页面的一部分)上重复使用。

我创建了一个控制器和部分视图,它将使用RenderAction调用进行渲染。如果我运行网络应用程序,我不会看到HTML已呈现。我确实看到控制器被调用,但函数不是....

(注意:ExtendedController派生自ASP.NET MVC的Controller类)

控制器:

public class LoginInfoController : ExtendedController
    {
        private IDependencyFactory factory;

        public LoginInfoController(IDependencyFactory factory)
            : base(factory)
        {
            this.factory = factory;
        }

        [ChildActionOnly]
        public PartialViewResult UserInfo()
        {
            var viewModel = new LogonInfoViewModel
            {
                Fullname = "Patrick Peters"
            };

            return PartialView(viewModel);
        }

    }

_Layout.cshtml:

<div class="span2 offset7">
                <div class="bottom">
                    @{Html.RenderAction("UserInfo", "LoginInfo");}
                </div>
            </div>

_LoginInfo.cshtml:

<div class="user" style="text-align: right">
    <cut HTML....>
</div>

1 个答案:

答案 0 :(得分:1)

请改为尝试:

[ChildActionOnly]
public PartialViewResult UserInfo()
{
    var viewModel = new LogonInfoViewModel
    {
        Fullname = "Patrick Peters"
    };

    return PartialView("_LoginInfo", viewModel); // <-- change is in this line
}

当您调用return PartialView(viewModel)时,MVC会假定您的视图名称与控制器视图文件夹中的操作方法名称相同。如果将“_LoginInfo.cshtml”重命名为“UserInfo.cshtml”并确保它位于Views / LoginInfo文件夹中,则您的解决方案应该有效。