1

私はこの難問を何日も探していて、多くの可能な解決策を考えていましたが、例が私が試みているものから遠すぎて、データを取り込むのに十分ではありません。したがって、私は自分自身に質問をして、私の特定の状況を示すことにしました。

このような製品モデルを入手しました(簡略化)

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; }
    }

したがって、言語に中立なデータを持つ 1 つの製品があり、各製品には言語ごとに 1 つずつ、複数の子要素を含めることができます。言語に依存しないデータと言語固有のデータ (名前と説明) を表示する編集フォームがあります。

簡略図:

@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 に適切な、または「ベスト プラクティス」のアプローチはありますか?

4

0 に答える 0