C# 如何在视图中结合两个模型(ASP.net MVC)

C# 如何在视图中结合两个模型(ASP.net MVC),c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,两个模型组合在一起存在于视图中 1.~/Products.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ShoppingStore.Domain.Entities { public class Product { public int ProductID

两个模型组合在一起存在于视图中

1.~/Products.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ShoppingStore.Domain.Entities
{
    public class Product
    {
        public int ProductID { get; set;}
        public string Name { get; set; }
        public string Description { get; set; }
        public decimal Price { get; set;  }
        public string Category { get; set; }
    }
}
2.~/PorductListViewModel.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

using ShoppingStore.Domain.Entities;

namespace ShoppingStore.WebUI.Models
{
    public class ProductsListViewModel
    {
        public IEnumerable<Product> Products { get; set; }
        public PagingInfo PageInfo { get; set; }
        public string CurrentCategory { get; set; }
    }
}
我用这种方式

并在一个模型中添加两个模型

1.~/MainPageModel.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using ShoppingStore.Domain.Entities;

namespace ShoppingStore.WebUI.Models
{
    public class MainPageModel
    {
        public ProductsListViewModel ProductsListViewModel { get; set; }
        public Product Product { get; set; }
    }
}
和下面的代码

~/List.cshtml

@model ShoppingStore.WebUI.Models.MainPageModel

@{
    ViewBag.Title = "Prodcuts";

}
@foreach (var p in Model.PorductListViewModel.Products)
{

 @Html.Partial("ProductSummary",p)
}


<div>
    @Html.PageLinks(Model.PorductListViewModel.PageInfo, x => Url.Action("List", new { page = x , category = Model.PorductListViewModel.CurrentCategory }))
</div>

<div>
         @using (Html.BeginForm())
         {

            <div >
                @Html.HiddenFor(x => x.Product.ProductID)
                @Html.Hidden("returnUrl", Request.Url.PathAndQuery)
                <input type="submit" value="Add to cart" />
            </div>

            <div>
                <div id='DIV2'><input type="button" onclick="incrementValue1()" value="ADD" /></div>
                <div id="DIV2"> <input type="text" id="number1" value="0" /></div>
                <div id="DIV2"><input type="button" onclick="decrementValue1()" value="minus" /></div>
            </div>
            <button id="checkvalue" onclick="checkValue()" type="submit">Check</button>
         </div>

    }
@model ShoppingStore.WebUI.Models.MainPageModel
@{
ViewBag.Title=“Prodcuts”;
}
@foreach(Model.PorductListViewModel.Products中的var p)
{
@Html.Partial(“ProductSummary”,p)
}
@页面链接(Model.PorductListViewModel.PageInfo,x=>Url.Action(“列表”,新的{page=x,category=Model.PorductListViewModel.CurrentCategory}))
@使用(Html.BeginForm())
{
@Html.HiddenFor(x=>x.Product.ProductID)
@隐藏(“returnUrl”,Request.Url.PathAndQuery)
检查
}
运行时,IIS会显示以下错误消息

传入字典的模型项的类型为“ShoppingStore.WebUI.Models.ProductsListViewModel”,但此字典需要“ShoppingStore.WebUI.Models.MainPageModel”类型的模型项。


为什么出现此错误消息

似乎您返回了错误的模型以查看“@model ShoppingStore.WebUI.Models.MainPageModel

您的代码看起来不错,但您需要检查控制器返回视图的详细信息,其应如下所示:

public ActionResult ViewAction()
{

MainPageModel objMainPageModel = new MainPageModel();
objMainPageModel.ProductsListViewModel = new ProductsListViewModel();
objMainPageModel.ProductsListViewModel= //Bind this model as well

//Bind Data in objMainPageModel and return to view
return View("List", objMainPageModel)

}

你怎么称呼这个观点?来自控制器?从另一个角度看?向我们展示所有相关代码。但问题很简单,您必须执行类似于
返回视图(“列表”,new ProductsListViewModel())
的操作,而不是
返回视图(“列表”,new MainPageModel())
共享控制器返回视图()详细信息错误是不言自明的,实际上所需的模型是ShoppingStore.WebUI.Models.MainPageModel,并且您正在视图中使用ShoppingStore.WebUI.Models.ProductsListViewModel,更改控制器传入的模型并执行某些映射我添加我的控件,thx对于您的重播,您的意思是我添加了如下代码的控件您的控制器操作代码应该是这样的。它似乎不起作用,它会告诉我“MainPageModel”类型中不存在“ProductsListViewModel”您是否添加了MainPageModel objMainPageModel=new MainPageModel();objMainPageModel.ProductsListViewModel=新产品ListViewModel();这在您的控制器操作中是的,我添加了如下更改代码“public ViewResult List(string category,int page=1){MainPageModel objMainPageModel=new MainPageModel();objMainPageModel.ProductsListViewModel=new ProductsListViewModel();ProductsListViewModel=new ProductsListViewModel{//};返回视图(“列表”,objMainPageModel);}'
public ActionResult ViewAction()
{

MainPageModel objMainPageModel = new MainPageModel();
objMainPageModel.ProductsListViewModel = new ProductsListViewModel();
objMainPageModel.ProductsListViewModel= //Bind this model as well

//Bind Data in objMainPageModel and return to view
return View("List", objMainPageModel)

}