簡體   English   中英

ASP.NET Core MVC:asp-for 正在渲染不完整的 id 和 name 屬性

[英]ASP.NET Core MVC: asp-for is rendering incomplete id and name attributes

當我遍歷 my.cshtml 文件中的列表時,由於某種原因,id 和 name 屬性值呈現不完整。 例如:

 @for (int i = 0; i < Model.product.ProductDetail.Count(); i++)
{
    <input type="text"
    asp-for="product.ProductDetail.ElementAt(i).Sku"
    class="form-control"
    placeholder="@SharedLocalizer["Sku"]" />
}

呈現為:

<input type="text" class="form-control" placeholder="Sku" id="Sku" name="Sku">

代替:

<input type="text" id="product.ProductDetail_0__Sku" name="product.ProductDetail[0].Sku" class="form-control" placeholder="Sku">

我正在使用 Entity Framework Core 3.1.3,這是我的 model:

產品:

public partial class Product
{
     public Product()
     {
          ProductDetail = new HashSet<ProductDetail>();
     }

     /* More properties here... */

     public virtual ICollection<ProductDetail> ProductDetail { get; set; }
}

產品明細:

public partial class ProductDetail
{
    /* More properties here... */
    public string Sku { get; set; }
}

產品視圖型號:

public class ProductViewModel
{
    public Product product { get; set; }
    /* More properties here... */
}

你知道為什么會這樣嗎?

asp-for是一個ModelExpression ,它被評估以構建idname屬性。 如果您使用ElementAt() ,則無法完全評估此表達式。

嘗試在您的集合中使用直接索引器。 示例如下:

<input type="text"
asp-for="product.ProductDetail[i].Sku"
class="form-control"
placeholder="@SharedLocalizer["Sku"]" />

編輯:我強烈建議在您的視圖中使用視圖模型而不是數據持久性級別模型。 然后,您可以在視圖 model 中使用List (而不是ICollection並相應地應用上述索引。

首先,使用asp-for="product.ProductDetail[i].Sku"作為 CalC 共享可以對我測試 model 數據有用。

如果它確實不適合您,您可以嘗試為您的輸入字段手動設置 id、name 和 value 屬性,如下所示。

這是我的 Model 代碼:

產品:

public class Products
{
    public Product product { get; set; }
}

產品:

public class Product
{
    public List<ProductDetail> ProductDetail { get; set; }
}

產品明細:

public class ProductDetail
{
    public string Sku { get; set; }
}

看法:

<div>
    @for (int i = 0; i < Model.product.ProductDetail.Count(); i++)
    {
        <input type="text"
               asp-for="product.ProductDetail[i].Sku"
               class="form-control" 
               placeholder="@SharedLocalizer["Sku"]"/>
    }
    @for (int i = 0; i < Model.product.ProductDetail.Count(); i++)
    {
        <input type="text"
               id="product_ProductDetail_@(i)__Sku"
               name="product.ProductDetail[@(i)].Sku"
               value="@Model.product.ProductDetail.ElementAt(i).Sku"
               class="form-control"
               placeholder="@SharedLocalizer["Sku"]"/>
    }
</div>

這是結果: 在此處輸入圖像描述

暫無
暫無

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

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