2017-06-28 3 views
-1

Zwei Modell kombiniert zu kombinieren, hat im Hinblick auf existierenwie mit zwei Modellen in der Ansicht (ASP.net MVC)

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; } 
    } 
} 

3.Control ~/ProductController.cs public Viewresult List (String Kategorie, int page = 1)

{ 
      ProductsListViewModel model = new ProductsListViewModel 
      { 
       Products = repository.Products.Where(p => category ==null || p.Category ==category).OrderBy(p => p.ProductID).Skip((page - 1) * PageSize).Take(PageSize), 
       PageInfo = new PagingInfo {CurentPage = page,ItemPerPage = PageSize,TotalItems = category == null ? repository.Products.Count() : repository.Products.Where(e => e.Category == category).Count()}, 
       CurrentCategory = category 
      }; 
      return View(model); 
} 

Ich benutze diese Art und Weise Multiple models in a view

und fügen Sie zwei Modelle in einem Modell

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; } 
    } 
} 

und chnage Code wie unten

~/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> 

    } 

Beim Ausführen, IIS haben unten Fehlermeldung.

Das Modellelement in das Wörterbuch übergeben ist vom Typ ‚ShoppingStore.WebUI.Models.ProductsListViewModel‘, aber dieses Wörterbuch erfordert ein Modell Artikel vom Typ ‚ShoppingStore.WebUI.Models.MainPageModel‘.

warum haben diese Fehlermeldung

+0

Wie Sie die Ansicht rufen Sie? Von einem Controller? Aus anderer Sicht? Zeigen Sie uns den relevanten Code. Aber das Problem ist einfach, Sie müssen etwas tun, wie 'return View (" List ", neue ProductsListViewModel())' anstelle von 'return View (" List ", neue MainPageModel())' – Rumpelstinsk

+0

Teilen Sie Ihre Controller-Rückgabe View() Details –

+2

Der Fehler ist selbsterklärend wirklich das erforderliche Modell ist ShoppingStore.WebUI.Models.MainPageModel und Sie verwenden ShoppingStore.WebUI.Models.ProductsListViewModel in Ihrer Ansicht, Ändern Sie das Modell durch den Controller übergeben und einige Arten von Mapping –

Antwort

1

Sein scheint, dass Sie falsches Modell zurückkehren, um „@model ShoppingStore.WebUI.Models.MainPageModel“.

Ihr Code sieht gut aus, aber Sie müssen Ihre Controller Rückkehr Ansicht überprüfen Details seine sein sollte:

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) 

} 
+0

du meinst, ich füge meine Steuerung wie unten Code – square

+0

hinzu Ihr Controller Action-Code sollte so sein. –

+0

es scheint donot Arbeit, es wird mir sagen, "ProductsListViewModel" existiert nicht in der Art "MainPageModel" – square

Verwandte Themen