在布局页面下拉列表 – MVC

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

我读过这篇文章: ASP.NET MVC Razor传递模型来布局它或多或少类似于我的问题。 在其中一篇评论中,Mattias Jakobsson写道:“但通常的解决方案是使用RenderAction在布局页面中渲染需要自己数据的部件”。 好吧,我已经用@ Html.Action()创建了布局页面,它使用db中的日期来渲染我的drop dwon列表。 一切都很完美。 但…

  1. 我有两个页面,例如:’Home’,’About’和我在布局页面的下拉列表(ddl)
  2. 如何实现当我在’家’并且我在ddl中更改选择时它刷新’主页’页面,当我在’关于’时刷新’关于’页面。
  3. 如何通过页面存储选定的ddl值?

Layout.cshtml代码的一部分:

  . .  
@Html.ActionLink(@Resources.Resource.BackToIntranet, "Index", "Home", null, new {@class = "link link-home grid-position-left"})

@Resources.Resource.SiteTitle

@Resources.Resource.LayoutHelp
@Html.Action("VariantsDdl", "MyBase")
@RenderBody() . .

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); } . . } 

此致,Marcin

好吧,我已经设法解决了这个问题,我想知道你的观点与我的解决方案相符。

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

  
@Html.Action("VariantsDdl", "MyBase")

操作:VariantsDdl在MyBaseController中实现。 此操作从会话加载选定的变体id,或者如果它是null,则从web.config加载(在这种情况下,它的项目要求至少必须在db中存在一个变体,并且必须在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(); 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  @Html.DropDownList("Varaints", Model, new { id = "variantsDdl" })  

部分视图后期操作'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值

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

此致,Marcin