如何在每个视图中显示类似信息?

时间:2011-09-29 19:50:20

标签: asp.net-mvc-3 razor

我想显示有关用户注册状态的信息。它应该显示在每个视图上,但我认为,将此代码写入大约20次是一个坏主意。顺便说一句,这是代码,它的工作原理,我保证:

查看/ RegistrationInfo:

<table width="95%" border="0" cols="2">
  <tr>
    <td width="50%" height="124"><h2><strong>Simple Blog </strong></h2></td>
    <td width="50%" height="124">

    @if (System.Web.HttpContext.Current.User.Identity.IsAuthenticated)
    {
        using (Html.BeginForm("LogOff", "Account"))
        {
        <table width="95%" height="86" border="0">
                    <tr>
                        <td width="50%" valign="middle">Hello, @System.Web.HttpContext.Current.User.Identity.Name</td>
                        <td width="50%" valign="middle" align = "right"><input type="submit" value="Exit" /></td>
                    </tr>
        </table>
        }
    }
    else
    {
            using (Html.BeginForm("LogIn", "Home"))
            {
                <table width="95%" height="86" border="0">
                    <tr>
                        <td width="45%" valign="bottom">Login:</td>
                        <td width="45%" valign="bottom">Password:</td>
                        <td width="10%"></td>
                    </tr>
                    <tr>
                        <td width="45%">
                            <p>
                                <input type="text" name="login" />
                            </p>
                        </td>
                        <td width="45%">
                            <p>
                                <input type="password" name="password" />
                            </p>
                        </td>
                        <td width="10%" align="left"> 
                            <input type="submit" value="Enter" />
                        </td>
                    </tr>
                    <tr>
                        <td width="45%" valign="top">
                            @Html.ActionLink("Register", "Register", "Account")
                        </td>
                    </tr>
                </table>
            }

        }

     </td>
  </tr>
</table>

<hr align="left" width="100%" size="2" />

正如您所看到的,此视图不需要强类型...我不知道,我应该修改任何控制器(因为,所有信息都存储在HTML上下文中),以及如何。我试着打电话给

@Html.RenderAction("RegistrationInfo", "Home");

或     @ Html.RenderPartial(“RegistrationInfo”,“Home”);

每次我收到有关无效参数的消息的编译错误

2 个答案:

答案 0 :(得分:2)

虽然Darin的答案完全涵盖了您的问题,但我会指出注册信息似乎更像是布局的一部分(.aspx倾向的母版页)而非实际操作。

所以我会做的(事实上,做)将它放在右上角或侧边菜单下的布局的标题部分,然后让布局处理渲染它的所有细节(当你没有登录时,用它来条件隐藏它,所以你不会在登录屏幕上看到它。)

答案 1 :(得分:0)

以下内容应该有效:

@Html.Partial("~/Views/Home/RegistrationInfo.cshtml")

或者,如果您只是在Home控制器的视图中:

@Html.Partial("RegistrationInfo")

或者,如果您将此部分放在~/Views/Shared/RegistrationInfo.cshtml中,您将能够使用简写语法进行引用。