![](/img/trans.png)
[英]ASP.NET Core -> Label asp-for not returning label text
[英]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
,它被評估以構建id
和name
屬性。 如果您使用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.