2012-01-18 90 views
1

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

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

回答

0

我结束了创建这样一个会话变量:

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"]); 
0

使用TempData的[ “”]对象创建会话状态。

您的视图模型应该看起来有点像:

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” 导出操作按钮点击。

+0

谢谢你的评论,但我看起来很不一样。我做的和杰里米的非常相似。 public ActionResult Export(){ \t \t \t var customers = customerRepository.FindAll(); \t \t \t返回新ExcelResult (顾客) \t \t \t \t .Columns(柱=> { \t \t \t \t \t column.For(X => x.Id); \t \t \t \t \t柱。 (x => x.Name) \t \t \t \t \t column.For(x => x.DateOfBirth).Format(“{0:d}”); \t \t \t \t}); \t \t} – 2012-01-24 13:40:01

相关问题