布局页面的下拉列表 - MVC

2024-07-04

我的问题:布局页面的下拉列表。

我读过这篇文章:ASP.NET MVC Razor 将模型传递给布局 https://stackoverflow.com/questions/4154407/asp-net-mvc-razor-pass-model-to-layout它或多或少与我的问题相似。 Mattias Jakobsson 在评论中写道:“但常见的解决方案是使用 RenderAction 来渲染布局页面中需要自己数据的部分”。 好吧,我已经使用 @Html.Action() 创建了布局页面,它使用数据库中的日期呈现我的 drop dwon 列表。一切都很完美。但...

  1. 我有两个页面,例如:布局页面上的“主页”、“关于”和我的下拉列表(ddl)
  2. 当我位于“主页”并且更改了 ddl 中的选择时,如何实现这一点,它会刷新“主页”页面,而当我位于“关于”时,它会刷新“关于”页面。
  3. 如何通过页面存储选定的ddl值?

Part of Layout.cshtml code:

    .
    .
    <body>
    <header id="top" class="grid-full-margin">

        <strong id="logo" class="grid-304"><a href="/"><img src="/images/logo.png" ></a></strong>
        @Html.ActionLink(@Resources.Resource.BackToIntranet, "Index", "Home", null, new {@class = "link link-home grid-position-left"})

        <h1>@Resources.Resource.SiteTitle</h1>

        <a href="#" class="link link-help">@Resources.Resource.LayoutHelp</a>

        <nav clss="grid-896">

            <ul>
                <li>@Html.ActionLink(Resources.Resource.LayoutMenuItem1, "Index", "Home")</li>
                <li>@Html.ActionLink(Resources.Resource.LayoutMenuItem2, "Index", "ClimaticStation")</li>
                <li>@Html.ActionLink(Resources.Resource.LayoutMenuItem3, "Index", "ClimaticPoint")</li>
                <li>@Html.ActionLink(Resources.Resource.LayoutMenuItem4, "Index", "IcewaterExchanger")</li>
                <li>@Html.ActionLink(Resources.Resource.LayoutMenuItem5, "Index", "Pipeline")
                    <ul>
                        <li>@Html.ActionLink("Zestawienie", "YearsLength", "Pipeline")</li>
                    </ul>
                </li>
            </ul>

            <div class="mod-select-list tbl-actions">
                @Html.Partial("~/Views/Shared/Partials/LoginPartial.cshtml")
            </div>
        </nav>



    </header>
    <form action="#">
        @Html.Action("VariantsDdl", "MyBase")
    </form> 

    @RenderBody()
    .
    .

Part of MyBaseController.cs

   public class MyBaseController : Controller
{
   [ChildActionOnly]
    public ActionResult VariantsDdl()
    {
        var dataFromDb = GetDataFromDB(); // it's not importstn right now
        return this.PartialView("~/Views/Shared/Partials/VariantsDdlPartial.cshtml", dataFromDb);
    }
   .
   .
   }

问候, 马尔辛


好的,我已经成功解决了这个问题,我想知道您对我的解决方案的看法。

_Layout.cshtml 看起来与第一篇文章相同,所以下面只是这个问题最重要的部分(布局中的下拉列表)

    <div style="float: right;">
            @Html.Action("VariantsDdl", "MyBase")
    </div>

操作:VariantsDdl 在 MyBaseController 中实现。此操作从会话加载选定的变体 ID,如果它为空,则从 web.config 加载(在这种情况下,项目要求数据库中必须至少存在一个变体,并且必须在配置中指定其 id):

    [ChildActionOnly]
    public ActionResult VariantsDdl()
    {
        long defaultVariantID;
        long.TryParse(System.Configuration.ConfigurationManager.AppSettings["DefaultVariantId"], out defaultVariantID);

        if (System.Web.HttpContext.Current.Session["mySelectedVariant"] != null)
        {
            long.TryParse(System.Web.HttpContext.Current.Session["mySelectedVariant"].ToString(), out defaultVariantID);
        }

        var variants = this.db.warianties.ToList();
        var items = new List<SelectListItem>();
        foreach (var variant in variants)
        {
            var selectedItem = false;
            if(variant.id == defaultVariantID)
            {
                selectedItem = true;
            }

            items.Add(new SelectListItem { Selected = selectedItem, Text = variant.nazwa, Value = variant.id.ToString() });
        }

        return this.PartialView("~/Views/Shared/Partials/VariantsDdlPartial.cshtml", items);
    }

将选定的变体 ID 存储到会话的部分视图和后操作:

    @model IEnumerable<SelectListItem>

    <label for="field">Current variant</label>
    @Html.DropDownList("Varaints", Model, new { id = "variantsDdl" })

   <script type="text/javascript">
$(function () {
    $('#variantsDdl').change(function () {
        var val = $('#variantsDdl').val()
        $.ajax({
            type: "POST",
            url: '@Url.Action("ChangeVariant", "MyBase")' + '/' + val,
            success: function (result) {
                location.reload();
            },
            error: function (data) { alert('Error'); }
        });

    });
});

部分视图后操作“ChangeVariant”,将选定的变体 ID 保存到会话中:

   [HttpPost]
    public ActionResult ChangeVariant(long id = 0)
    {
        System.Web.HttpContext.Current.Session["mySelectedVariant"] = id;

        return null;
    }

这是我的要求的解决方案: 1.布局时的DDL 2. 在 DDL 'onchange' 处刷新当前页面 3. 通过页面保留选定的DDL值

请评论是否是合适的解决方案,或者我应该采取不同的方式?

问候, 马尔辛

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

布局页面的下拉列表 - MVC 的相关文章

  • TortoiseGit / Winforms:合并时解析 Resource.resx

    我对 TortoiseGit 还很陌生 想知道如果 resx 文件发生冲突 如何在合并过程中解决它 例如 我可以从菜单中选择 使用他们的 尝试进行拉动和推动 但这是正确的方法吗 我可以以某种方式使用他们的并通过我的项目更改重建它吗 差异 以
  • typedef 和 Define 之间的区别[重复]

    这个问题在这里已经有答案了 可能的重复 c中typedef和 define一样吗 https stackoverflow com questions 1666353 is typedef and define the same in c 对
  • 查找表到底是如何工作的以及如何实现它们? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我最近编写了一个程序 该程序处理大量 if else 语句以返回特定值 有人建议改用查找表 我的问题是 它们是如何工作的以及您如何实施
  • 在 C++ 中访问静态类变量?

    复制 C 对静态类成员的未定义引用 https stackoverflow com questions 272900 c undefined reference to static class member 如果我有这样的类 结构 head
  • 将指针转换为64位整数,为什么在32位和64位平台上结果不同

    我有一个这样的代码片段 up cpp include
  • 对 .NET Remoting CAO 的暴力攻击

    我正在尝试使用 NET 远程客户端激活对象来在多次调用期间保留客户端的身份验证信息 而不是实现需要客户端在每次调用中发送会话 ID 的会话管理系统 正如 MSDN 所说 当客户端使用 new 运算符提交对服务器对象的请求时 激活请求消息将发
  • 如何使用 MVVM light 处理 WP 8.1 上的后退按钮?

    我正在寻找适当的方法来处理 Windows Phone 8 1 WinRT 上的后退按钮按下事件NavigationService在 MVVM light 5 上可用 到目前为止 我认为最好的地方是在ViewModelLocator通过注册
  • C++:你会选择 boost::date_time 还是 icu::date/time 库?

    我的应用程序需要自定义时间和日期设置功能 我检查了 ICU 和 boost date time 库 从完整性的角度来看 两者似乎都满足我的要求 我想知道两者之间是否有任何偏好 依据是什么 哪一个会在表现上得分 如果没有有关您的特定用例和环境
  • node.js 本机插件 - 包装类的析构函数不运行

    我正在用 C 编写一个 Node js 插件 我使用 node ObjectWrap 包装一些类实例 以将本机实例与 JavaScript 对象关联起来 我的问题是 包装实例的析构函数永远不会运行 这是一个例子 point cc inclu
  • Google 的“编码折线算法”的 C# 实现

    有谁有 Google 的简洁而强大的实现吗 编码折线算法 http code google com apis maps documentation utilities polylinealgorithm html in C 我本质上想要实现
  • 如何知道机器的堆栈在内存中是向上还是向下增长? (JAVA)

    我有一个 C 程序来检查机器堆栈在内存中是向上还是向下增长 事情是这样的 include
  • c malloc 问题(内存损坏)

    使用 malloc 时 如果它生成带有错误的核心转储 malloc memory corruption 这是否意味着 malloc 尝试分配无法自由分配的内存 如果是的话 造成这种情况的原因是什么 这完全取决于您的 malloc 实现 但通
  • 基本镜面着色

    我正在使用一个生成阴影球体的简单代码 我还没有完全理解数学 但我在玩代码时正在弄清楚它 我想知道如何根据这段代码实现镜面反射着色 有什么建议么 for y 0 y
  • 在程序中使用 resources.resx 中的嵌入文件

    我有一个程序 它需要一个文本文件来保存一些信息 我有当前使用文件路径的函数 然后用它来做一些事情 但是 我想将程序构建为 exe 但文件显然不会位于同一个位置 经过研究 我发现使用嵌入式资源可以让我将文本文件添加到程序中 但我似乎无法用它做
  • SWIG Python 结构体数组

    我已经搜索了几天 试图弄清楚如何将结构数组转换为 Python 列表 我有一个函数返回指向数组开头的指针 struct foo int member struct foo bar struct foo t malloc sizeof str
  • 使用 QProcessEnvironment 更改 cmd.exe 的 PATH 环境变量

    我想从设置了特定路径的 Qt 应用程序启动 cmd exe 我在 QProcessEnvironment 中插入 Path 并将该环境设置为 QProcess 然后我开始分离 cmd 在命令提示符上 路径与调用应用程序的路径相同 而不是我刚
  • 收据在打印文档中有重叠文本

    我正在 POS 项目中创建打印收据并附上输出的图片 我的问题是描述 数量 价格 金额的重叠 如何在这段代码的下一行显示数量 价格和金额 e Graphics DrawString Description new Font trebuchet
  • 无堆栈协程与堆栈协程有何不同?

    背景 我问这个问题是因为我目前有一个具有许多 数百到数千 线程的应用程序 这些线程中的大多数在很大一部分时间内处于空闲状态 等待将工作项放入队列中 当工作项可用时 它会通过调用一些任意复杂的现有代码来处理 在某些操作系统配置上 应用程序会遇
  • GO 语句破坏了 .NET 中的 SQL 执行

    我有一个非常简单的 C 命令 shell 应用程序 它执行 SQL Server 生成的 SQL 脚本来编写模式和数据脚本 它在 GO 声明中爆炸了 错误信息 GO 附近的语法不正确 这是完整的 sql 脚本 Object Table gy
  • lldb:无法实现:无法获取变量的值

    我用这个命令行编译了一个cpp文件 g g test cpp 它在第 28 行抛出异常 我想通过检查 lldb 中的变量来调查原因 我在第 28 行设置了一个断点并运行a out在LLDB中 lldb n Process 84233 sto

随机推荐