2016-11-21 4 views
0

私は現在、asp.netコアを学習していますので、RouteDataを自分のmvcモデルに追加して表示することを試みましたが、データ値(@Model.Data.Count) ViewBagまたは@ViewContext.RouteData.Values[key]を私のビューコードに使用したくありません。motelの表示するRoteData

MVCルート

app.UseMvc(route => 
     { 
      route.MapRoute(
       name: "default", 
       template: "{controller=Home}/{action=Index}/{id?}/{*catchall}"); 
     }); 

私のアクションメソッド

public ViewResult List(string id) 
    { 
     var r = new Result 
     { 
      Controller = nameof(HomeController), 
      Action = nameof(List), 
     }; 

     // var catch=RouteData.Values["catchall"]; this line is working fine 
     r.Data["id"] = id ?? "<no value>"; 
     r.Data["catchall"] = RouteData.Values["catchall"]; 
     //when I checked r.Data.count it returns 0 even in here 
     return View("Result", r); 
    } 

と私の見解

@model Result 
. 
. 
@foreach (var key in Model.Data.Keys) 
    { 
     <tr><th>@key :</th><td>@Model.Data[key]</td></tr> 
    } 
+1

「結果」の完全定義は何ですか? – Bwolfing

+0

私のモデルです。 2つの文字列とIDictionary が含まれています。もう一つはただの見解です – payam

答えて

1

あなたは必要としない独自のDictionary限り、あなたはViewData性質を持っているとして、しかし、次のようになるたびにobjectをキャストする必要があります。あなたのビュー

public ViewResult List(string id) 
    { 
     var r = new Result 
     { 
      Controller = nameof(HomeController), 
      Action = nameof(List), 
     }; 

     ViewData["id"] = id ?? "<no value>"; 
     ViewData["catchall"] = RouteData.Values["catchall"]; 

     return View("Result", r); 
    } 

<tr><th>id :</th><td>@(int)ViewData["id"]</td></tr> 

私はあなたが同じ問題を抱えていると仮定 - あなたはobjectからそれを得るために値をキャストする必要があります。すべてのオブジェクトに.ToSting()メソッドがあるので、stringプロパティを取得します。

関連する問題