错误:"传入字典的模型项为null"在MVC中

时间:2014-05-09 19:46:08

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

得到错误我不明白: “传入字典的模型项为null, 但是这个字典需要一个'System.Decimal'类型的非null模型项。“ 发生在视图中的这一行:

<td>@Html.EditorFor(model => model.Price)</td>

它应该为null。这适用于“创建产品”页面。这是代码:

public ActionResult Create()
        {           
            var items = new ProductItems();
            return View(items.Products);

VIEW :
@using Nop.Web.Models.Products
@model ProductItems

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)    
 <tr>
     <td>@Html.EditorFor(model => model.Price)  << error here

VIEW MODEL :
 public class ProductItems
    {
        public decimal Price { get; set; }
        public IEnumerable<Product> Products { get; set; } 


NOTE : I previously changed the View Model. It was :
@model Nop.Core.Domain.Catalog.Product
and it worked before I changed it.

导致此错误的原因是什么?感谢

2 个答案:

答案 0 :(得分:3)

你没有向视图传递任何东西,而是一个空对象,因此它说为model.price为null。如果您希望填充编辑器模板,则必须说明

public ActionResult Create()
{           
            ProductItems items = new ProductItems();
            items.Price = 15.99;
            return View(items);

 }

由于您正在向视图传递类型为ProductItems的模型,因此您的视图也必须具有该类型。您应该将Model Classes放入Models文件夹中。在您的视图中调用的默认值为

@model NameSpace.Models.ProductItems,不确定模型类的路径。

答案 1 :(得分:0)

@model  Nop.Web.Models.ProductItems

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)    
    <table>
        <tr>
            <td>@Html.EditorFor(model => model.Price)
            </td>
        </tr>

    </table>
}
  

我已经使用了你的代码而你的代码在我的处理过程中没有出现错误,但是你也像这个视图一样使用并且要小心第一次清理构建。