【问题标题】:Display list of variables in MVC view在 MVC 视图中显示变量列表
【发布时间】:2011-12-19 14:30:47
【问题描述】:

我必须在 MVC 视图中打印/显示几个变量的值。我该怎么做..

public ActionResult DisplayVariables()
    {
        ViewBag.Message = "Welcome to ASP.NET MVC!";           
        {               
           //After some process/logic.. variables get assigned values here..
                int var1 = xxxxxx;
                int var2 = xxxxx;
                int var3 = xxxxxx;
                int var4 = xxxxx;    
        }
        return View()  //I want to display variables values with lables here in this 
                       //view. I already have a view with name "DisplayVariables"
    }

【问题讨论】:

  • 向视图发送Dictionary<String,Object> 并对其进行迭代?或者可能使用反射并使过程自动化(假设您只是从ViewBag 中剥离属性)
  • 你能显示你的视图定义吗?
  • 请看下面我的回答..谢谢

标签: asp.net-mvc asp.net-mvc-3 view


【解决方案1】:

您可以在视图中通过执行类似的操作来做到这一点

@ViewBag.Message.var1

最好创建一个视图模型并将其传递给您的视图。

【讨论】:

  • 请看我想出的解决方案......看起来怎么样?
【解决方案2】:

我使用 expando 对象来做到这一点。请看我下面的回复..

public ActionResult DisplayVariables()
{
    ViewBag.Message = "Welcome to ASP.NET MVC!";    

    dynamic Model = new ExpandoObject();

    {               
       //After some process/logic.. variables get assigned values here..

            int var1 = xxxxxx;
            int var2 = xxxxx;
            int var3 = xxxxxx;
            int var4 = xxxxx;   

           Model.var1 = var1;
           Model.var2 - var2;  
           Model.var3 = var3;
           Model.var4 - var4;  
    }

    return View(Model)  //I want to display variables values with lables here in this 
                   //view. I already have a view with name "DisplayVariables"
}

在视图中..我有

  <h2><%=Model.var1%></h2> 

这个解决方案如何......似乎对我有用。

【讨论】:

    【解决方案3】:

    为了完整起见,这里有一个非常基本的示例,说明如何创建强类型视图、视图模型和传递数据。

    定义视图模型:

    namespace MyNameSpace.ViewModels
    {
        public class MyViewModel
        {
            public string Var1;
            public string Var2;
            public string Var3;
        }
    }
    

    将其填充到您的控制器中:

    public ActionResult DisplayVariables()
    {
        var model = new MyViewModel
        {
            Var1 = "Foo",
            Var2 = "Bar",
            // ...
        }
    
        return View(model);
    }
    

    最后,在视图中声明模型(在 DisplayVariables.cshtml 中)

    @* Note the small 'm' here.  You'll probably need to 
       put a namespace in front of the type name as well. *@
    @model MyNameSpace.ViewModels.MyViewModel
    
    @Model.Var1<br />
    @Model.Var2<br />
    

    【讨论】:

      【解决方案4】:

      嗯,这是一个有点旧的帖子,但它可以为其他人节省时间。 我做了一个局部视图,它使用反射来显示对象属性

      @using System.Reflection;
      @{
          Object l_o = ViewBag.ObjectToDisplay;
      }
      <style type="text/css">
          table,th,td
          {
              border:1px solid green;
              border-collapse:collapse;
              padding:3px;
          }
          th
          {
              background-color:green;
              color:white;
          }
          #display-title
          {
              font-size:large;
              color:green;
          }
      </style>
      <div>
          <div id="display-title">@l_o.GetType().Name</div>
          <table> 
          <tr>
              <th>Property</th>
              <th>Value</th>
          </tr>
      
          @foreach (PropertyInfo l_info in l_o.GetType().GetProperties())
          {
              <tr> 
                  <td> 
                      <div class="display-label" style="text-align: right;"> 
                          @l_info.Name 
                      </div> 
                  </td> 
                  <td> 
                      <div class="display-value"> 
                          @l_info.GetValue(l_o, null) 
                      </div> 
                  </td> 
              </tr> 
          }
          </table>
      </div>
      

      然后我用这个作为

      @{
          Layout = null;
      }
      
      <!DOCTYPE html>
      
      <html>
      <head>
          <title>Register</title>
      </head>
      <body>
          @Html.Partial("ObjectPropertiesView") 
      </body>
      </html>
      

      不要忘记在控制器中设置 ViewBag.ObjectToDisplay。

      【讨论】:

        猜你喜欢
        • 2018-08-21
        • 2015-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-16
        • 2021-05-31
        • 1970-01-01
        相关资源
        最近更新 更多