2016-11-21 94 views
0

我目前正在学习asp.net核心,所以试图将RouteData添加到我的mvc模型,并将其传递给查看,但是当我计算数据值的数量(@Model.Data.Count)时,它返回0 。我不想在View Code中使用ViewBag或@ViewContext.RouteData.Values[key]通过RoteData查看mvc模型

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得到它。你得到string属性,因为每个对象都有.ToSting()方法。