Misalkan saya memiliki ViewModel seperti
public class AnotherViewModel
{
public string Name { get; set; }
}
public class MyViewModel
{
public string Name { get; set; }
public AnotherViewModel Child { get; set; }
public AnotherViewModel Child2 { get; set; }
}
Dalam tampilan saya bisa membuat sebagian dengan
<% Html.RenderPartial("AnotherViewModelControl", Model.Child) %>
Secara parsial saya akan melakukannya
<%= Html.TextBox("Name", Model.Name) %>
or
<%= Html.TextBoxFor(x => x.Name) %>
Namun, masalahnya adalah keduanya akan membuat name = "Name" sementara saya harus memiliki name = "Child.Name" agar pengikat model berfungsi dengan benar. Atau, name = "Child2.Name" saat saya merender properti kedua menggunakan tampilan parsial yang sama.
Bagaimana cara membuat tampilan parsial saya secara otomatis mengenali awalan yang diperlukan? Saya bisa melewatkannya sebagai parameter tetapi ini terlalu merepotkan. Ini bahkan lebih buruk ketika saya ingin misalnya merendernya secara rekursif. Apakah ada cara untuk merender tampilan parsial dengan prefiks, atau, bahkan lebih baik, dengan pengubahan otomatis dari ekspresi lambda yang memanggil sehingga
<% Html.RenderPartial("AnotherViewModelControl", Model.Child) %>
secara otomatis akan menambahkan "Anak" yang benar. awalan ke string nama / id yang dihasilkan?
Saya dapat menerima solusi apa pun, termasuk mesin dan pustaka tampilan pihak ke-3 - Saya benar-benar menggunakan Mesin Tampilan Spark (saya "memecahkan" masalah menggunakan makro-nya) dan MvcContrib, tetapi tidak menemukan solusi di sana. XForms, InputBuilder, MVC v2 - alat / wawasan apa pun yang menyediakan fungsionalitas ini akan sangat bagus.
Saat ini saya berpikir tentang pengkodean ini sendiri tetapi sepertinya buang-buang waktu, saya tidak percaya hal-hal sepele ini belum diterapkan.
Mungkin ada banyak solusi manual, dan semuanya diterima. Misalnya, saya bisa memaksa parsial saya untuk didasarkan pada IP PartialViewModel <T> {public string Prefix; Model T; }. Tetapi saya lebih suka beberapa solusi yang ada / disetujui.
UPDATE: ada pertanyaan serupa tanpa jawaban di sini .
helper.ViewData.TemplateInfo.HtmlFieldPrefix
dalam bentuk{oldprefix}.{newprefix}