簡體   English   中英

在asp.net mvc中列出並創建相同的視圖

[英]List and create in same view in asp.net mvc

我有以下模型類

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'的模型項。

錯誤是不言自明的,您的視圖接受@model albaraka.Models.ProductViewModel而不是@model IList<albaraka.Models.ProductViewModel> 在您的視圖中,您使用的是@model albaraka.Models.ProductViewModel ,它指示View所期望的模型是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);
}

該錯誤可以准確地告訴您問題所在。 您正在向視圖提供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);
}

好吧,異常文本是不言自明的 - 您將不正確的類型傳遞給視圖。

它應該是

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

錯誤的直接原因是您作為參數(List)傳遞的內容與視圖( ProductViewModel類的實例)所期望的內容類型不匹配。

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

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

請嘗試以下方法:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM