【问题标题】:How do I Pass a Variable from one Controller to another using MVC Contrib?如何使用 MVC Contrib 将变量从一个控制器传递到另一个控制器?
【发布时间】:2012-01-18 19:10:23
【问题描述】:

Jeremy Skinner 有一个关于从 MVC Contrib 导出电子表格的博客和视频。问题是他的视频或博客中没有进行过滤。在与包含网格的页面关联的控制器中,我有过滤器,并且在与“导出到电子表格”关联的控制器中,我需要该过滤器而无需重置。问题是,每次单击“导出到”时,变量都会重置电子表格”链接。如何在不重置的情况下将该变量从一个控制器传递到另一个控制器?

这是 Jeremy 的链接,http://www.jeremyskinner.co.uk/2010/04/28/mvccontrib-grid-presentation。谢谢!!

【问题讨论】:

    标签: model-view-controller mvccontrib mvccontrib-grid


    【解决方案1】:

    我最终创建了一个这样的 Session 变量:

    1- 通过编辑 web.config 来启用会话变量:。

    <configuration>
       <system.web>
          <sessionState cookieless="true" regenerateExpiredSessionId="true" />
       </system.web>
    </configuration>
    

    2- 在第一个控制器中创建会话状态

    Session["FirstName"] = FirstNameTextBox.Text;
    

    3- 在第二个控制器中使用会话状态

    string firstName = (string)(Session["FirstName"]);
    

    【讨论】:

      【解决方案2】:

      使用 TempData[""] 对象。

      您的 ViewModel 应该看起来像:

      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Text;
      using System.ComponentModel;
      using MvcContrib.Pagination;
      using MvcContrib.UI.Grid;
      using System.Web.Mvc;
      
      namespace MyMVCProject.ViewModels
      {
          public class SubscriptionViewModel
          {
              public int SubscriptionID { get; set; }        
              public string SubNo { get; set; }               
          }
          public class SubscriptionListContainerViewModel
          {
              public IPagination<SubscriptionViewModel> SubscriptionPagedList { get; set; }
              public SubscriptionFilterViewModel Filters { get; set; }
              public GridSortOptions GridSortOptions { get; set; }
              public int? TotalCount { get; set; }
          }
          public class SubscriptionFilterViewModel
          {
              public int? CustomerID { get; set; }
              public int? PlanID { get; set; }        
          }
      }
      

      您的控制器操作:

          public ActionResult Index(SubscriptionListContainerViewModel model, GridSortOptions gridSortOptions, int? page)
                  {
                    SubscriptionFilterViewModel filter = new SubscriptionFilterViewModel();
                      if (model.Filters != null)
                      {
                          filter.CustomerID = model.Filters.CustomerID;
                          filter.PlanID = model.Filters.PlanID;
                      }
                    TempData["Filters"]=filter;
                   //code for IPagination<SubscriptionViewModel> population.
                  }
      

      导出功能:

      public void Export()
              {
                SubscriptionFilterViewModel filter = (SubscriptionFilterViewModel)TempData["Filters"];
                TempData["Filters"]=filter;
                //code for IPagination<SubscriptionViewModel> population and excel creation.
                //output the excel after creation
      
                  Guid fileId = Guid.NewGuid();
                  string strFileName = Convert.ToString(fileId) + ".xls";
                  string strFilePathnName = HttpContext.Server.MapPath ("~/Content/Uploads/Excels/Export/") + strFileName;
                  MemoryStream file = new MemoryStream();
                  hssfworkbook.Write(file);
                  System.IO.File.WriteAllBytes(strFilePathnName, file.GetBuffer());
                  System.IO.FileInfo inf = new FileInfo(strFilePathnName);
                  HttpContext.Response.AddHeader("Content-Disposition", "attachment; filename=Blogs" + inf.Extension);
                  HttpContext.Response.ContentType = "application/ms-excel";
                  HttpContext.Response.TransmitFile(HttpContext.Server.MapPath ("~/Content/Uploads/Excels/Export/" + strFileName));
              }
      

      在“导出到 Excel”按钮单击中调用导出操作。

      【讨论】:

      • 感谢您的评论,但我的看起来有很大不同。我做的和杰里米的很相似。公共 ActionResult Export() { var customers = customerRepository.FindAll(); return new ExcelResult(customers) .Columns(column => { column.For(x => x.Id); column.For(x => x.Name); column.For(x => x.DateOfBirth ).Format("{0:d}"); }); }
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多