2012-01-18 89 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

相關問題