0

我想创建一个控件,允许用户使用 ASP.NET MVC4 在管理站点的主页上显示/隐藏 div 框。例如,如果用户从管理站点选择禁用 div 框,当他返回主页时 div 框将消失,显示 div 框也是如此。

我整天都在寻找正确的答案,但仍然没有找到最佳答案。而且我真的不知道如何在管理站点和主页之间链接。

以下是我的管理页面:

<div class="section-header">
    <div class="title">
        <img src="@Url.Content("~/Administration/Content/images/ico-configuration.png")" alt="" />
        @T("Manage LoginBox")
    </div>
    <div class="options">
         <input type="submit" name="save" class="t-button" value="@T("Admin.Common.Save")" />
    </div>
</div>
     <script type="text/javascript">
        @*$(document).ready(function () {

            $("#@Html.FieldIdFor(model => model.EnableLoginBoxAtHomePage)").click(toggleLoginBoxEnabled);

            toggleLoginBoxEnabled();
        });*@

        function toggleLoginBoxEnabled() {
            if ($('#@Html.FieldIdFor(model => model.EnableLoginBoxAtHomePage)').is(':checked')) {
                Response.Write("Surprise");
                $('#pnlShowLoginBoxAtHomePage').show();

            }
            else {
                $('#pnlShowLoginBoxAtHomePage').hide();
            }
        }
        function toggleLoginBoxDisabled() {
            if ($('#@Html.FieldIdFor(model => model.DisableLoginBoxAtHomePage)').is(':checked')) {
                $('#pnlHideLoginBoxAtHomePage').hide();
            }
            else {
                $('#pnlHideLoginBoxAtHomePage').show();
            }
        }
    </script>

@Html.ValidationSummary(false)
<table class="adminContent">
        <tr id="pnlShowLoginBoxAtHomePage" onclick="toggleLoginBoxEnabled">

            <td class="adminTitle">
                @Html.LabelFor(model => model.EnableLoginBoxAtHomePage)
            </td>
            <td class="adminData">
                @Html.EditorFor(model => model.EnableLoginBoxAtHomePage)
                @Html.ValidationMessageFor(model => model.EnableLoginBoxAtHomePage)
            </td>
        </tr>
        <tr id="pnlHideLoginBoxAtHomePage" onclick="toggleLoginBoxDisabled">
            <td class="adminTitle">
                @Html.LabelFor(model => model.DisableLoginBoxAtHomePage)
            </td>
            <td class="adminData">
                @Html.EditorFor(model => model.DisableLoginBoxAtHomePage)
                @Html.ValidationMessageFor(model => model.DisableLoginBoxAtHomePage)
            </td>
        </tr>


</table>


}

这是我想在主页显示/隐藏的 div 框:

<div class="block block-loginbox" >
    <div class="title">
        <strong>@T("Login")</strong>
    </div>
    <div class="clear">
    </div>
<div class="listbox" @*id="myloginbox"*@>
    <fieldset class="form-fields returning-wrapper">
            <legend>@T("Account.Login.ReturningCustomer")</legend>
            <dl>
                @using (Html.BeginForm("Login","Customer"))
                {
                    <dd class="message-error">
                        @Html.ValidationSummary(true, T("Account.Login.Unsuccessful").Text)
                    </dd>


                    <dt>
                        @Html.LabelFor(m => m.Email): </dt>
                    <dd>
                        @Html.TextBoxFor(m => m.Email, new { @class = "email", autofocus = "autofocus" })
                        @Html.ValidationMessageFor(m => m.Email)
                    </dd>

                    <dt>
                        @Html.LabelFor(m => m.Password): </dt>
                    <dd>
                        @Html.PasswordFor(m => m.Password, new { @class = "password" })
                        @Html.ValidationMessageFor(m => m.Password)
                    </dd>
                    <dd>
                        @Html.CheckBoxFor(m => m.RememberMe)
                        @Html.LabelFor(m => m.RememberMe)
                    </dd>
                    <dd class="forgot-password">
                        @Html.RouteLink(T("Account.Login.ForgotPassword").Text, "PasswordRecovery")
                    </dd>

                    <dd class="buttons">
                        <input class="button-1 login-button" type="submit" onclick="location.href='@registerUrl'" value="@T("Account.Login.LoginButton")" />
                    </dd>

                }
            </dl>
        </fieldset>
        <div class="clear">
        </div>

     </div>
     </div>
4

1 回答 1

0

您似乎对网站的概念有些误解。您的页面不应该(而且绝对不能)一起通信。每次你请求一个页面时,你都会得到一个新实例,除非它被指定为静态并且......不不不,让我们把它留在那个 - 你不能。

您的“问题”的常见解决方案是实现某种Settings文件/数据库表/任何东西,当您将页面保存在管理部分中时,它将存储您的设置。然后,当用户请求您的主页时,您的代码会查看这些设置并确定要执行的操作。

更新:

这不是特定于 asp.net 的,它是所有网站的工作方式。HTTP 是无状态的,您需要以某种方式持久化数据。

基本思想如下所示:

admin page -> load settings -> modify -> save settings
other page -> load settings -> if some setting applies, do something

您的页面应该与存储机制通信,而不是相互通信,因为正如我已经说过的,除非您违反几乎所有原则,否则这是不可能的。

存储设置的多少并不重要how,它可以是一个包含键和值对的简单文件。或者可能是一个 xml 文件,或者一个数据库......你明白了。只要它可用于您需要的页面并且不违反您网站的安全性,就可以了。这一切都取决于您的需求!

希望我不必展示如何连接到数据库并检索值......

于 2013-04-16T23:23:58.807 回答