【问题标题】:How do I display all elements of a ViewModel in a view如何在视图中显示 ViewModel 的所有元素
【发布时间】:2015-12-04 10:45:54
【问题描述】:

我知道你可以做@Html.DisplayForModel 和ValueForModel,有没有类似viewModel 的东西?我想在我的视图模型中显示元素的所有属性名称和属性值

我的常规 ValueFor 也不起作用

这就是我目前所拥有的......虽然它不起作用:

@model BookStore.ViewModels.CheckOutViewModel       
 @using (Html.BeginForm())
{
    <h2>Checkout Summary</h2>
    <fieldset>
        <legend>Payment Information</legend>

        @Html.ValueFor(m => m.CreditCard1)<br />
        @Html.ValueFor(m => m.CreditCardType1) <br />

        @Html.DisplayNameFor(Model => Model.CreditCard1)
        @Html.DisplayFor(Model => Model.CreditCard1)
        @Html.
    </fieldset>

    <fieldset>
        <legend>Shipping Information</legend>
        @Html.ValueForModel()
    </fieldset>

}

控制器代码:

public ActionResult Complete(int? id)
{
    return View(id);
}

编辑:我想我真正的问题是如何从我的视图模型中获取任何属性以显示其价值

【问题讨论】:

  • 你能从你的控制器发布代码吗?您似乎没有将模型传递给视图。
  • 已发布,现在我看了它,我有点明白你的意思,但通常 GET 方法只是返回 View()?
  • 它只返回一个整数,而不是你期望的视图模型,你的返回语句应该像 return View(你的视图模型对象);

标签: c# asp.net-mvc entity-framework asp.net-mvc-viewmodel


【解决方案1】:

您将对象(模型)的 Id 传递给您的视图,而不是模型本身。你的控制器中应该有这样的东西:

public ActionResult Complete(int? id)
{    
     CheckOutViewModel model = GetModel(id);
     return View(model);
}

GetModel 是一些函数,您可以在其中根据 id 检索 CheckOutViewModel。

【讨论】:

  • 我们会在 get 模型中输入什么类型的逻辑?对不起,我从来没有写过这种类型的东西
  • 取决于您使用的是什么?您将数据存储在哪里以及希望在视图中显示什么?
  • 所有数据都存储在一个 azure 数据库中,我在 dataContext 类 (DAL) 中启动它;在视图中,我们要显示已完成订单的摘要(我的视图模型中的所有字段都对应)
  • 然后你应该调用你的dataContext类来获取你想要显示的数据并将其放入你的模型中。比将模型传递给视图。
  • 嘿 FreddieH,我介意聊一下 MVC 聊天吗?我和我的团队无法一次性写出我们的问题
【解决方案2】:

编辑:查看您的控制器,您只是返回一个整数而不是您的模型

如果你真的不熟悉,你可以这样做:

public ActionResult Complete(int? id)
{
    if(int != null && int != 0){ //Makes sure int isn't empty or 0
       var allModelData = dataContext(); //Get all the data in your dataContext
       var myModel = allModelData.FirstOrDefault(x => x.id == id); //This gets the 
                                                            //model that matches the ID
       CheckOutViewModel viewModel = myModel; //Populate it into your viewmodel
       return View(viewModel); //Return your viewmodel
    }
    return View();
}

这不是最有效的做事方式,但可以帮助您开始使用一些数据。

我还建议使用 Model.PropertyName 作为 ValueFor 进行忽略任何模板的简单渲染(等效于调用 String.Format)

        @Model.CreditCard1<br />
        @Model.CreditCardType1 <br />

【讨论】:

  • 对不起,我没有意识到该行没有被复制,视图模型已经包含在内:/
  • 那么问题出在哪里?
猜你喜欢
  • 2017-07-11
  • 2013-08-26
  • 2012-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多