【问题标题】:Pass data between viewmodels在视图模型之间传递数据
【发布时间】:2011-02-14 01:01:37
【问题描述】:

我想我正在使用 mvc 取得进展。 我创建了一个绑定到我的视图模型的视图,看起来像这样

public class CreatePurchaseViewModel
{
  public Order Order { get; set; }
  public IEnumerable<Product> Products { get; set; }
  public DateTime OrderDate { get; set; }
  public bool OrderSent { get; set; }

}

我还创建了另一个视图模型

public class ProductsViewModel
{
  public int ProductID { get; set; }
  public int OrderID { get; set; }
}

我已经创建了一个绑定到这个视图模型的局部视图。

我正在从我的视图中加载它

@Html.Partial("_AddProductItem", new MVC_WireFrame.ViewModels.ProductsViewModel())

现在如何将我的 ProductsViewModel 中的项目放入我的 CreatePurchaseViewModel 或者这不是正确的做事方式?

我可以从我的控制器中的 ProductsViewModel 访问数据,例如

[HttpPost]
public ActionResult InsertProduct(string input)
{}

真的有2个问题,我如何将值传递给另一个视图控制器?和 如何在 AddProduct 部分视图中填充列表,以便显示已添加的产品?

提前感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

    通常,您不应将数据从一个视图模型传递到另一个视图模型。您应该创建视图模型类,使其包含视图显示所需的所有信息。控制者有责任填写此信息。关于列表的第二个问题,您只需向该视图模型添加一个IEnumerable&lt;T&gt; 类型的属性,该视图模型将由控制器填充,并且视图可以显示已添加的产品。因此,请考虑您的视图需要哪些信息并将其作为属性添加到视图模型中。

    【讨论】:

    • 再次感谢达林,我可以更新我的 CreatePurchaseViewModel 视图模型以包含一个公共列表 然后我将所有选定的项目添加到 CreatePurchaseViewModel 中吗?然后我的控制器处理 ProductsViewModel 列表。
    • @Diver,请随意将您需要的任何属性放入视图模型中。这就是它们的目的:包含视图所需的所有信息。
    • cool.....它开始慢慢变得有意义了 :) 从客户端的角度来看,我是否在 httpPost 的隐藏字段中构建了所有 ProductsViewModel 对象?跨度>
    • @Diver Dan,如果您想在请求之间保留它们,那么使用隐藏字段来存储它们的值是一种方法。另一种方法是仅将 id 存储到将发送到服务器的隐藏字段中,服务器将使用此 id 从您的数据存储中重新获取值。
    • 我就是这么想的。我只需要对如何存储 id 以及数量之类的东西进行一些研究。也许每次单击按钮都会构建一个 json 对象,而不是当我回发到控件时读取 json。
    猜你喜欢
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多