2012-01-18 6 views
1

Jeremy Skinnerには、MVC Contribからスプレッドシートをエクスポートするためのブログとビデオがあります。問題は、彼のビデオやブログで行われたフィルタリングがないことです。グリッドを含むページに関連付けられているコントローラーでは、フィルターがあり、「スプレッドシートへのエクスポート」に関連付けられたコントローラーで、リセットせずにフィルターが必要です。 。?。スプレッドシート」のリンク私はMVC Contribを使用して、あるコントローラから別のコントローラに変数を渡すにはどうすればよいですか?

ここ

はジェレミーのリンク、http://www.jeremyskinner.co.uk/2010/04/28/mvccontrib-grid-presentationでリセットすることなく、別のコントローラからその変数を取得するにはどうすればよいありがとう!!

答えて

0

私はこのようなセッション変数の作成終わった:

1次のようにweb.configを編集してセッション変数を有効にします。

-2- 0は、第contoller

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

使用TempDataを[ ""]オブジェクトに第1コントローラ

Session["FirstName"] = FirstNameTextBox.Text; 

3-使用セッション状態でセッション状態を作り出します。

あなたの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へのエクスポート" でエクスポートするアクションボタンをクリックします。

+0

ご意見ありがとうございますが、私の見解はかなり異なっています。私はJeremy'sに非常によく似ていました。 public ActionResultエクスポート(){ \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カラム。For(x => x.DateOfBirth).Format( "{0:d}"); \t \t \t \t}); \t \t} –

関連する問題