Тема: Не вірно біндиться модель з форми ASP CORE MVC
Чомусь не біндяться Опції атрибуту з форми до моделі (Саме на стороні сервера, на клієнській стороні форма формує опції)
Маю форму для додавання продукту :
@model Jewelery.ViewModels.DTO.Product.ProductCMSDTO
@{
Layout = "~/Views/Shared/_LayoutCSM.cshtml";
}
<script src="~/js/CMS/ProductImageFunc.js"></script>
<script src="~/js/CMS/ProductAtributeFunc.js"></script>
<script src="~/js/CMS/CategoryDropList.js"></script>
<div>
@using (Html.BeginForm("AddProduct", "Product", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div >
@*
public List<Product_imagesDTO> Images { get; set; }
*@
<div class="Image_Container">
@for(int i = 0; i < Model.Images.Count; i++)
{
<div class="Image_group" id="Image_group_@i">
<div>
<img src="#" alt="Image Preview @i" id="ImagePreview_@i">
</div>
<div>
<input type="file" accept="image/*" name="Images[@i].ImageFile" onchange="PreviewImage(event,@i)">
</div>
<div>
<label for="Images[@i].Alt_text">Alt_text</label>
@Html.EditorFor(model => model.Images[i].Alt_text);
</div>
<div>
<button type="button" onclick="RemoveImage(@i)">RemoveImage</button>
</div>
</div>
}
</div>
<div>
<button type="button" id="newImageInput" onclick="AddImageField(event)"> Add Image </button>
</div>
</div>
<div>
<div>
<label for="Name_UKR">Name_UKR</label>
@Html.EditorFor(model => model.Name_UKR)
</div>
<div>
<label for="Name_ENG">Name_ENG</label>
@Html.EditorFor(model => model.Name_ENG)
</div>
<div>
<label for="Description_UKR">Description_UKR</label>
@Html.TextAreaFor(model => model.Description_UKR)
</div>
<div>
<label for="Description_ENG">Description_ENG</label>
@Html.TextAreaFor(model => model.Description_ENG)
</div>
<div>
<label for="Price">Price</label>
@Html.EditorFor(model => model.Price)
</div>
<div>
<label for="Category_id">Category_id</label>
@*@Html.EditorFor(model => model.Category_id) @*Recode*@
<select name="Category_id" id="Category_id" onchange="GetSubCategory(event)">
<option>Choose Category</option>
</select>
</div>
<div>
<label for="SubCategory_id">SubCategory_id</label>
@*@Html.EditorFor(model => model.SubCategory_id) @*Recode*@
<select name="SubCategory_id" id="SubCategory_id">
<option selected>Choose SubCategory_id</option>
</select>
</div>
<div>
<label for="Articul">Articul</label>
@Html.EditorFor(model => model.Articul)
</div>
<div>
<label for="isExist">isExist</label>
@Html.EditorFor(model => model.isExist)
</div>
<div>
<label for="isDisplay">isDisplay</label>
@Html.EditorFor(model => model.isDisplay)
</div>
<div>
<div id="Atribute_Container">
@for(int i = 0; i < Model.Attributes.Count; i++)
{
<div class="Atribute_group" id="Atribute_group_@i">
<div>
<label for="">Atribute_name_UKR</label>
@Html.EditorFor(model => model.Attributes[i].Atribute_name_UKR)
</div>
<div>
<label for="">Atribute_name_ENG</label>
@Html.EditorFor(model => model.Attributes[i].Atribute_name_ENG)
</div>
<div>
<label for="">Unit</label>
@Html.EditorFor(model => model.Attributes[i].Unit)
</div>
<div>
<label for="">DetermineTheSize_Id</label>
@Html.EditorFor(model => model.Attributes[i].DetermineTheSize_Id)
</div>
<div class="Option_container" id="Option_container_for_atribute_@i">
@for (int x = 0; x < Model.Attributes[i].Options.Count; x++)
{
<div class="Option_group" id="Option_group_@x">
<div>
<label for="Attributes[@i].Options[@x].Size">Size</label>
@Html.EditorFor(model => model.Attributes[i].Options[x].Size) Attributes[1].Options[2].Size
</div>
<div>
<label for="Attributes[@i].Options[@x].PriceAdjustment">PriceAdjustment</label>
@Html.EditorFor(model => model.Attributes[i].Options[x].PriceAdjustment)
</div>
<div>
<button type="button" onclick="RemoveOption(@x)">Delete Option</button>
</div>
</div>
}
<div>
<button type="button" onclick="AddOption(@i)">Add Option</button>
</div>
</div>
<div>
<button type="button" onclick="RemoveAtribute(@i)">Delete Atribute</button>
</div>
</div>
}
<div>
<button type="button" onclick="AddAtribute()">Add Atribute</button>
</div>
</div>
</div>
@*
public List<AtributeCMSDTO> Attributes { get; set; }
*@
</div>
<div>
<button type="submit">Add Product</button>
</div>
}
</div>
Маю Модель Продукту :
public class ProductCMSDTO
{
public int Product_id { get; set; }
public string Name_UKR { get; set; }
public string Name_ENG { get; set; }
public string Description_UKR { get; set; }
public string Description_ENG { get; set; }
public decimal Price { get; set; }
public int Category_id { get; set; }
public int Articul { get; set; }
public int? SubCategory_id { get; set; }
public List<Product_imagesDTO> Images { get; set; }
public List<AtributeCMSDTO> Attributes { get; set; }
public bool isExist { get; set; }
public bool isDisplay { get; set; }
public DateTime Created_at { get; set; }
public DateTime Updated_at { get; set; }
}
public class AtributeCMSDTO
{
public int Atribute_id { get; set; }
public string Atribute_name_UKR { get; set; }
public string Atribute_name_ENG { get; set; }
public int Product_id { get; set; }
public List<Option> Options { get; set; }
public string? Unit { get; set; }
public int? DetermineTheSize_Id { get; set; }
}
public class Option
{
public int Option_id { get; set; }
public int Atribute_id { get; set; }
public Atribute Atribute { get; set; }
public decimal Size { get; set; }
public decimal PriceAdjustment { get; set; }
}
При додаванні Атрибуту і опцій до атрибуту через js (HTML такий самий як і в for циклі), на сервер відправляється ProductCMSDTO з лістом AtributeCMSDTO, але в AtributeCMSDTO пустий список Option
Що я роблю не так? можливо краще зробити по іншому?