2016-11-21 3 views
0

В настоящее время я изучаю ядро ​​asp.net, поэтому попытался добавить RouteData в мою модель mvc и передать его для просмотра, однако, когда я подсчитываю количество значений Data (@Model.Data.Count), он возвращает 0 Я не хочу использовать ViewBag или @ViewContext.RouteData.Values[key] в моем коде зрения.pass RoteData для просмотра по mvc model

маршрут 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

Что такое полное определение 'Result'? – 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. Вы получаете string свойство becouse каждый объект есть .ToSting() способ.