मान लीजिए मेरे पास ViewModel है
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; }
}
देखने में मैं एक आंशिक के साथ प्रस्तुत कर सकता हूँ
<% Html.RenderPartial("AnotherViewModelControl", Model.Child) %>
आंशिक में मैं करूँगा
<%= Html.TextBox("Name", Model.Name) %>
or
<%= Html.TextBoxFor(x => x.Name) %>
हालाँकि, समस्या यह है कि दोनों ही नाम = "नाम" को प्रस्तुत करेंगे जबकि मुझे मॉडल बाइंडर को ठीक से काम करने के लिए नाम = "चाइल्ड.नाम" रखने की आवश्यकता है। या, नाम = "Child2.Name" जब मैं एक ही आंशिक दृश्य का उपयोग करके दूसरी संपत्ति प्रदान करता हूं।
मैं अपने आंशिक दृश्य को आवश्यक उपसर्ग को स्वचालित रूप से कैसे पहचान सकता हूं? मैं इसे एक पैरामीटर के रूप में पारित कर सकता हूं लेकिन यह बहुत असुविधाजनक है। यह और भी बुरा है जब मैं उदाहरण के लिए इसे पुनरावर्ती रूप से प्रस्तुत करना चाहता हूं। क्या एक उपसर्ग के साथ आंशिक विचारों को प्रस्तुत करने का एक तरीका है, या, और भी बेहतर, कॉलिंग लैम्ब्डा अभिव्यक्ति के स्वचालित संयोजन के साथ ताकि
<% Html.RenderPartial("AnotherViewModelControl", Model.Child) %>
स्वचालित रूप से सही जोड़ देगा "बाल।" उत्पन्न नाम / आईडी तार के लिए उपसर्ग?
मैं किसी भी समाधान को स्वीकार कर सकता हूं, जिसमें 3-rd पार्टी व्यू इंजन और लाइब्रेरी शामिल हैं - मैं वास्तव में स्पार्क व्यू इंजन (मैं अपने मैक्रोज़ का उपयोग करके समस्या को हल करता हूं) और MvcContrib का उपयोग करता हूं, लेकिन वहां कोई समाधान नहीं मिला। XForms, InputBuilder, MVC v2 - इस कार्यक्षमता को प्रदान करने वाले किसी भी उपकरण / अंतर्दृष्टि बहुत अच्छा होगा।
वर्तमान में मैं इसे स्वयं कोड करने के बारे में सोचता हूं, लेकिन यह समय की बर्बादी की तरह लगता है, मैं विश्वास नहीं कर सकता कि यह तुच्छ सामान पहले से लागू नहीं है।
बहुत सारे मैनुअल समाधान मौजूद हो सकते हैं, और उन सभी का स्वागत है। उदाहरण के लिए, मैं अपने हिस्से को जबरदस्ती IPartialViewModel <T> {सार्वजनिक स्ट्रिंग उपसर्ग पर आधारित होने के लिए मजबूर कर सकता हूं; टी मॉडल; }। लेकिन मैं कुछ मौजूदा / अनुमोदित समाधान पसंद करूंगा।
helper.ViewData.TemplateInfo.HtmlFieldPrefix
के रूप में नए उपसर्ग को जोड़ने की आवश्यकता है{oldprefix}.{newprefix}