2016-04-25 2 views
0

ここに問題があります。誰かが私の問題を解決するのに役立つことを願っています。問題は:私はC#とmvcを使用しています。私はdbテーブルを別の関数に渡したい。私はこの問題を解決する方法を知らない...そこに誰かが私にブール値または無効にmvcの別の関数にクエリテーブルを渡す#

public ActionResult Index() 
    { 
     var viewModel = db.test.ToList() 
     ExportExcel(viewModel); //pass current table to excel to export 
     return View(viewModel); 
    } 

//export to excel 
public ActionResult ExportExcel(xxxx viewModel) 
    { 
     var grid = new GridView(); 
     grid.DataSource = from p in viewModel 
          select new 
          { 
           Name = p.name, 
           No = p.staffno 
          }; 
     grid.DataBind(); 

     Response.ClearContent(); 
     Response.Buffer = true; 
     Response.AddHeader("content-disposition", "attachment; filename=MyExcelFile.xls"); 
     Response.ContentType = "application/ms-excel"; 

     Response.Charset = ""; 
     StringWriter sw = new StringWriter(); 
     HtmlTextWriter htw = new HtmlTextWriter(sw); 

     grid.RenderControl(htw); 

     Response.Output.Write(sw.ToString()); 
     Response.Flush(); 
     Response.End(); 

     return View("MyView"); 
    } 
+1

そして正確にあなたの問題は何ですか?何が効いていないのですか? –

+0

Index()のviewModelをExportExcel()に渡したいのですが、呼び出す方法がわかりません.ExcelExcelと 'xxxx'を参照してください。 – achimet

+0

xxxxを 'viewModel'の型に変更しますか? – Shyju

答えて

0

View("viewName")はビュー結果を返しますので、viewModelをExportExcelメソッドに渡すと、それを直接呼び出してIndexメソッドから返すことができます。あなたの輸出法で

public ActionResult Index() 
    { 
     // Dummy data 
     var dt = new DataTable(); 
     dt.Columns.Add("id", typeof(int)); 
     var row = dt.NewRow(); 
     row[0] = 4; 
     dt.Rows.Add(row); 

     ExportExcel(dt); 
     return View(); 
    } 

は、DataTableのにpaprameterの種類を変更します:

public ActionResult Index() 
{ 
    var viewModel = db.test.ToList() 
    var viewResult = ExportExcel(viewModel); 
    return viewResult; 
} 

//export to excel 
public ActionResult ExportExcel(List<test> viewModel) 
{ 
    var grid = new GridView(); 
    grid.DataSource = from p in viewModel 
         select new 
         { 
          Name = p.name, 
          No = p.staffno 
         }; 
    grid.DataBind(); 

    Response.ClearContent(); 
    Response.Buffer = true; 
    Response.AddHeader("content-disposition", "attachment; filename=MyExcelFile.xls"); 
    Response.ContentType = "application/ms-excel"; 

    Response.Charset = ""; 
    StringWriter sw = new StringWriter(); 
    HtmlTextWriter htw = new HtmlTextWriter(sw); 

    grid.RenderControl(htw); 

    Response.Output.Write(sw.ToString()); 
    Response.Flush(); 
    Response.End(); 

    return View("MyView"); 
} 
+0

そのタイプまたは名前空間の名前 'test'が見つかりませんでした(使用するディレクティブまたはアセンブリ参照がありませんか?) – achimet

+0

申し訳ありませんが私の間違い..私は交換する必要があります私の本当のモデルとのモデルは申し訳ありません。 – achimet

+0

@教訓の問題はありません。これは、あなたのモデルが何であるかを単に推測したものです。あなたの質問を更新したら私はそれに応じて私の答えを更新します。 –

0

変更ExportExcel関数の戻り値の型を助け、代わりにXXXX ... ののviewmodelにパラメータを変更することができると思います。おそらくあなたがいることを移動することができますいくつかのユーティリティクラスへのコード。

+0

public void ExportExcel(viewmodel viewModel)?? – achimet

+0

はい..モデルが一覧 .. –

+0

を意味が表示ごめん.. uは私はこのエラーを得た 詳しく説明することができます:型または名前空間名「のViewModelは」 – achimet

0

と仮定すると、ViewModelにはされたSystem.Data.DataTableある

public EmptyResult ExportExcel(DataTable test) 
    { 
     var grid = new GridView(); 

     grid.DataSource = test; 
     grid.DataBind(); 
     ... your existing code 
     return new EmptyResult(); 
    } 
関連する問題