我有一个问题,我不确定如何解决(代码方面),我想从社区获得一些意见。
所以,我有一个页面,我将在其中显示产品详细信息,这些详细信息将根据 DropDownList (DDL) 上选择的值而有所不同。因此,对于每个产品,我都有所述产品的变体集合,这些变体由 UniqueId 和属性 uniqueIds 的 JSON 数组标识,如下所示:
[
{
"AttributeId": "fe153d69-8ac1-6e0c-8793-ff0000804eb3",
"AttributeValueId": "64163d69-8ac1-6e0c-8793-ff0000804eb3"
},
{
"AttributeId": "00163d69-8ac1-6e0c-8793-ff0000804eb3",
"AttributeValueId": "67163d69-8ac1-6e0c-8793-ff0000804eb3"
}
]
这告诉我的是,这个特定的变体有Days
一个值为 5 的Portions
属性,一个值为 4 的属性等等。
对于这个特定的产品,我还有其他具有相同方案的值/变量。这是我可能的值:
Days | Portions
3 2
3 4
3 6
5 4
现在,在我的视图中,我将两个 DDL 绑定到每个属性(一个用于几天,一个用于部分)。
这是我的控制器方法:
public ActionResult Details(Guid productId)
{
CatalogManager catalogManager = CatalogManager.GetManager();
EcommerceManager ecommerceManager = EcommerceManager.GetManager();
ProductListWidgetModel model = new ProductListWidgetModel();
model.Product = catalogManager.GetProduct(productId);
//Read the variant properties
JavaScriptSerializer serializer = new JavaScriptSerializer();
model.ProductVariations = catalogManager.GetProductVariations(productId).ToList();
model.Portions = new List<SelectListItem>();
model.Meals = new List<SelectListItem>();
foreach (var item in model.ProductVariations)
{
List<AttributeValuePair> attributeValuePairs = serializer.Deserialize<List<AttributeValuePair>>(item.Variant);
foreach (var attribute in attributeValuePairs)
{
if (catalogManager.GetProductAttribute(attribute.AttributeId).Title == "Portions")
{
var attributes = catalogManager.GetProductAttributeValue(attribute.AttributeValueId);
if (!model.Portions.Exists(x => x.Value == attributes.Title))
{
model.Portions.Add(new SelectListItem { Value = attributes.Id.ToString(), Text = attributes.Title });
}
}
if (catalogManager.GetProductAttribute(attribute.AttributeId).Title == "Days")
{
var attributes = catalogManager.GetProductAttributeValue(attribute.AttributeValueId);
if (!model.Meals.Exists(x => x.Value == attributes.Title))
{
model.Meals.Add(new SelectListItem { Value = attributes.Id.ToString(), Text = attributes.Title });
}
}
}
}
return View("Detail", model);
}
我的模型:
public class ProductListWidgetModel
{
/// <summary>
/// Gets or sets all the messages.
/// </summary>
public string Message { get; set; }
public string Title { get; set; }
public string SubTitle { get; set; }
public Product Product { get; set; }
public List<Product> ProductsList { get; set; }
public List<ProductVariation> ProductVariations { get; set; }
public List<SelectListItem> Portions { get; set; }
public List<SelectListItem> Meals { get; set; }
}
还有我的观点:
<table>
<tr>
<th id="row">@Html.DropDownList("MealsSelector", @Model.Meals } )</th>
<td id="row">Middager</td>
</tr>
<tr>
<th id="row">@Html.DropDownList("PortionsSelector", @Model.Portions)</th>
<td id="row">Porsjoner</td>
</tr>
</table>
但我真正需要做的是让绑定 DDL 的部分仅显示基于 Days DDL 的可能值,因此如果我选择 5 天,我应该只能选择在部分 DDL 上选择 4 个部分。
我怎样才能做到这一点?理想情况下,我更愿意通过 Ajax 或简单的 LINQ 过滤器来完成此操作。
谁能指导我如何将这些 DDL 相互绑定?