【发布时间】:2018-03-13 07:47:38
【问题描述】:
我收到以下错误。
传入字典的模型项的类型为“Vidly.ViewModels.CustomersViewModel”,但该字典需要类型为“Vidly.ViewModels.RandomMovieViewModel”的模型项。强>
这毫无意义!与“Vidly.ViewModels.RandomMovieViewModel”无关,我想要的只是在视图中传递“Vidly.ViewModels.CustomersViewModel”。 我的代码如下:
控制器
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Vidly.Models;
using Vidly.ViewModels;
namespace Vidly.Controllers
{
public class AnotherCustomersController : Controller
{
private ApplicationDbContext _context = new ApplicationDbContext();
// GET: AnotherCustomers
[Route("anothercustomers/index")]
public ActionResult Index()
{
var customers = new List<Customer>
{
new Customer
{
Id = 1, Name = "sdw",
IsSubscribedToNewsLetter = false,
MemberShipTypeId = 1,
MemberShipType = new MembershipType(),
MemberShipName = "TBD"
},
new Customer
{
Id = 2, Name = "dws",
IsSubscribedToNewsLetter = false,
MemberShipTypeId = 2,
MemberShipType = new MembershipType(),
MemberShipName = "TBD"
}
};
CustomersViewModel ViewModel = new CustomersViewModel
{
CustomerList = customers
};
return View(ViewModel);
}
}
}
客户视图模型
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Vidly.Models;
namespace Vidly.ViewModels
{
public class CustomersViewModel
{
public List<Customer> CustomerList { get; set; }
}
}
查看
@model Vidly.ViewModels.CustomersViewModel
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Customer</h2>
<ul>
@foreach (var c in Model.CustomerList)
{
<li>@c.Name</li>
}
</ul>
我很确定我分享的代码是正确的。
我想通过路径“/anothercustomers/index”返回一个视图(在 Views/AnotherCustomers 文件夹下)。
所以Controller必须是[AnotherCustomersController],action必须是Index()。
但我不明白为什么视图总是需要“Vidly.ViewModels.RandomMovieViewModel”,它与 AnotherCustomersController 没有关系。
以防万一,下面是“Vidly.ViewModels.RandomMovieViewModel”相关的代码。
电影控制器
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Vidly.Models;
using Vidly.ViewModels;
namespace Vidly.Controllers
{
public class MoviesController : Controller
{
[Route("movies/released/{year:Regex(\\d{4}):range(1991, 2018)}/{month:Regex(\\d{2}):range(1,12)}")]
public ActionResult ByReleasedDate(int year, int month)
{
return Content(year + "/" + month);
}
public ActionResult RandomMovie()
{
var movie = new Movie() { Name = "WTF" };
var customers = new List<Customer>
{
new Customer { Name = "Stoneway"},
new Customer { Name = "YourDaddy"}
};
var viewModel = new RandomMovieViewModel
{
Movie = movie,
Customers = customers
};
return View(viewModel);
}
}
}
RandomMovieViewModel
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Vidly.Models;
namespace Vidly.ViewModels
{
public class RandomMovieViewModel
{
public Movie Movie { get; set; }
public List<Customer> Customers { get; set; }
}
}
RandomMovieView
@model Vidly.ViewModels.RandomMovieViewModel
@{
ViewBag.Title = "RandomMovie";
Layout = "~/Views/Shared/_Layout.cshtml";
}
@{
var className = Model.Customers.Count > 5 ? "Popular" : null;
}
<h2 class="@className">@Model.Movie.Name</h2>
@if (Model.Customers.Count == 0)
{
<p>No One has rent this movie before.</p>
}
else
{
<ul>
@foreach (var c in Model.Customers)
{
<li>@c.Name</li>
}
</ul>
}
【问题讨论】:
-
查看代码呢?
@Model是什么? -
您的视图存储在哪里?您可以尝试在执行
return View(...时指定位置 -
您确定您正在加载正确的视图吗?视图放置在正确的文件夹中?
-
该视图驻留在哪个目录中?
-
分享其他控制器动作和视图。我不认为你在这里使用正确的操作/视图或共享正确的代码