我几天来一直在寻找这个难题并且已经有很多可能的解决方案,但是这些例子与我正在尝试的内容相差甚远,而且由于这个原因,我还不足以接受数据。因此,我决定自己提出这个问题并展示我的具体情况。
我得到了这样的产品模型(简化)
public class Product
{
[Key]
public int ProductId { get; set; }
public string SKU { get; set; }
public int ProductCategoriesId { get; set; }
public bool Purchase { get; set; }
public bool ShowProduct { get; set; }
public virtual IList<ProductTranslations> ProductTranslations { get; set; }
}
public class ProductTranslations
{
[Key]
public int ProductTranslationsId { get; set; }
public int ProductId { get; set; }
public string ProductLanguage { get; set; }
public string Description { get; set; }
public string ProductName { get; set; }
public virtual Product Product { get; set; }
}
所以我有一个产品具有语言中性数据,然后每个产品可以有几个子元素,每种语言一个。我有一个编辑表单,我想显示语言中性数据和语言特定数据(名称和描述)。
简化视图:
@model Artikelhantering.Models.Product
@using (Html.BeginForm())
{
@Html.LabelFor(model => model.SKU)
@foreach (var item in Model.ProductTranslations)
{
@Html.EditorFor(TranslationItem => item.ProductName)
@Html.TextAreaFor(TranslationItem => item.Description)
}
<p>
<input type="submit" value="Save" />
</p>
}
这使得视图上的所有内容都看起来干净整洁,我认为,我认为我可以(应该?)为编辑器视图制作专用的视图模型。无论如何问题是我不知道如何更新提交数据。我可以使用普通的EF方法更新语言中性数据,但是对其他模型的字段的任何更改都没有改变......
说实话,这对我来说是完全合理的,因为没有任何形式可以区分它们,也没有任何独特的id或类似的产品模型也不包含那些领域......我在旧经典中的方式asp将使用其唯一的Id命名字段,然后创建一个SQL更新查询,在提交表单时更新每个子模型。我想我也可以在这里实施这样的做法,但感觉不是正确的做法。
对于这种事情,MVC中是否有适当的或“最佳实践”方法?