【问题标题】:List and create in same view in asp.net mvc在 asp.net mvc 的同一视图中列出和创建
【发布时间】:2016-01-28 11:16:19
【问题描述】:

我有以下模型类

public class ProductViewModel
{
    public Product Products { get; set; }
    public IEnumerable<Product> LProducts { get; set; }
}

public partial class Product
{    
    public string id { get; set; }
    public string detail { get; set; }
}

然后我对 List 和 Create 都有以下视图

@model albaraka.Models.ProductViewModel    

<table class="table">
    <tr>

        <th>
            ID
        </th>
        <th>
            Detail
        </th>
    </tr>

    @foreach (var obj in Model.LProducts)
    {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => obj.id)
            </td>
            <td>
                @Html.DisplayFor(modelItem => obj.detail)
            </td>       
        </tr>   
    }

</table>

<div>
    @using ())
    {
        <div>
            <fieldset>
                <legend>Account Information</legend>

                <div class="editor-label">
                    @Html.LabelFor(m => m.id)
                </div>
                <div class="editor-field">
                    @Html.TextBoxFor(m => m.Products.id)
                    @Html.ValidationMessageFor(m => m.Products.id)
                </div>

                <div class="editor-label">
                    @Html.LabelFor(m => m.Products.detail)
                </div>
                <div class="editor-field">
                    @Html.TextBoxFor(m => m.Products.detail)
                    @Html.ValidationMessageFor(m => m.Products.detail)
                </div>

                <p>
                    <input type="submit" value="Submit" />
                </p>
            </fieldset>
        </div>
    }
</div>

@section Scripts 
{}  

这是列表的控制器方法

[HttpGet]
public ViewResult Product_List()
{
    ProductViewModel viewModelList = new ProductViewModel();

    viewModelList.LProducts = from products in db.Product
                  where products.details == "Pending"
                  select products;

    return View(viewModelList.LProducts.ToList());
}

但在这里我收到以下错误

传入字典的模型项是类型 'System.Collections.Generic.List`1[projectname.Models.Product]',但是 这个字典需要一个类型的模型项 'projectname.Models.ProductViewModel'。

【问题讨论】:

    标签: c# .net asp.net-mvc linq asp.net-mvc-4


    【解决方案1】:

    错误是不言自明的,您的视图接受@model albaraka.Models.ProductViewModel 而不是@model IList&lt;albaraka.Models.ProductViewModel&gt;。在您的视图中,您使用的是@model albaraka.Models.ProductViewModel,这表明视图期望的模型是ProductViewModel 类型:

    [HttpGet]
    public ViewResult Product_List()
    {
        ProductViewModel viewModelList = new ProductViewModel();
    
        viewModelList.LProducts = (from products in db.AB_Product
                      where products.details == "Pending"
                      select products).ToList();
    
        return View(viewModelList);
    }
    

    【讨论】:

    • 在将模型传递给视图之前,您错过了使用 ToList() 执行的实际 linq 查询。
    【解决方案2】:

    该错误会准确地告诉您问题所在。您正在向视图提供 Product 对象列表,而不是它所期望的 ProductModelView。将您的控制器代码更改为:

    [HttpGet]
    public ViewResult Product_List()
    {
        ProductViewModel viewModelList = new ProductViewModel();
    
        viewModelList.LProducts = (from products in db.Product
                      where products.details == "Pending"
                      select products).ToList();
    
        return View(viewModelList);
    }
    

    【讨论】:

      【解决方案3】:

      好吧,异常文本是不言自明的 - 您将错误的类型传递给视图。

      应该是

      public ViewResult Product_List()
      {
          ProductViewModel viewModelList = new ProductViewModel();
      
          viewModelList.LProducts = (from products in db.Product
                        where products.details == "Pending"
                        select products).ToList();
      
          return View(viewModelList);
      }
      

      【讨论】:

        【解决方案4】:

        错误的直接原因是您作为参数(列表)传递的内容与视图所期望的内容(ProductViewModel 类的实例)的类型不匹配。

        在您的控制器中,而不是行:

        return View(viewModelList.LProducts.ToList());
        

        尝试以下方法:

        return View(
           new ProductViewModel {LProducts = viewModelList.LProducts.ToList()}
        );
        

        【讨论】:

          猜你喜欢
          • 2011-07-02
          • 1970-01-01
          • 2019-12-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-27
          • 1970-01-01
          • 2015-12-02
          相关资源
          最近更新 更多