मैंने शुरुआत में सैम उत्तर की सिफारिश की होगी क्योंकि इसमें पथ संपत्ति का कोई बाध्यकारी शामिल नहीं होगा। आपने उल्लेख किया है कि आप पथ संपत्ति का उपयोग करके मूल्यों को जोड़ सकते हैं क्योंकि इससे आलसी लोडिंग हो सकती है। मुझे कल्पना है कि आप दृश्य में जानकारी प्रदर्शित करने के लिए अपने डोमेन मॉडल का उपयोग कर रहे हैं। इसलिए मैं व्यू मॉडलों का उपयोग केवल दृश्य में आवश्यक जानकारी प्रदर्शित करने के लिए अनुशंसा करता हूं (फिर पथ को पुनर्प्राप्त करने के लिए सैम उत्तर का उपयोग करें) और फिर टूल का उपयोग करके दृश्य मॉडल को डोमेन मॉडल में मैप करें (यानी AutoMapper)।
हालांकि, अगर आप ध्यान में रखते हुए अपने मौजूदा मॉडल का उपयोग करने के लिए जारी है और आप मॉडल में अन्य मूल्यों उपयोग नहीं कर सकते, तो आप के बाद कस्टम मॉडल बांधने की मशीन में फार्म मूल्य प्रदाता द्वारा प्रदान मूल्यों के लिए पथ संपत्ति सेट कर सकते हैं अन्य बाध्यकारी हुआ है (माना जाता है कि पथ संपत्ति पर कोई सत्यापन नहीं किया जाना चाहिए)।
@using (Html.BeginForm())
{
<p>Parent Path: @Html.EditorFor(m => m.ParentPath)</p>
<p>Slug: @Html.EditorFor(m => m.Slug)</p>
<input type="submit" value="submit" />
}
और निम्न दृश्य मॉडल (या डोमेन मॉडल जैसा भी मामला हो):
सार्वजनिक वर्ग IndexViewModel { सार्वजनिक स्ट्रिंग ParentPath {
तो मान आप निम्नलिखित दृश्य है की सुविधा देता है प्राप्त; सेट; } सार्वजनिक स्ट्रिंग स्लग {प्राप्त करें; सेट; } सार्वजनिक स्ट्रिंग पथ {प्राप्त करें; सेट; } }
फिर आप निम्नलिखित मॉडल बांधने की मशीन निर्दिष्ट कर सकते हैं:
public class IndexViewModelBinder : DefaultModelBinder
{
protected override void OnModelUpdated(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
//Note: Model binding of the other values will have already occurred when this method is called.
string parentPath = bindingContext.ValueProvider.GetValue("ParentPath").AttemptedValue;
string slug = bindingContext.ValueProvider.GetValue("Slug").AttemptedValue;
if (!string.IsNullOrEmpty(parentPath) && !string.IsNullOrEmpty(slug))
{
IndexViewModel model = (IndexViewModel)bindingContext.Model;
model.Path = bindingContext.ValueProvider.GetValue("ParentPath").AttemptedValue + "/" + bindingContext.ValueProvider.GetValue("Slug").AttemptedValue;
}
}
}
और अंत में है कि यह मॉडल बांधने की मशीन दृश्य मॉडल पर निम्न विशेषता का उपयोग करके उपयोग किया जाता है निर्दिष्ट करें:
[ModelBinder(typeof(IndexViewModelBinder))]
क्या मैं यह कहने में सही होगा कि 'पेज.पेंट.पैथ' और 'पेज। स्लग' फॉर्म से बंधे जा रहे हैं और आप बाध्यकारी होने के बाद ही 'पेज' पाथ को अपनी सामग्री के समापन पर सेट करना चाहते हैं? यानी 'पेज। पथ' मान फॉर्म पर मौजूद नहीं है? – Dangerous
@ खतरनाक सही, 'पृष्ठ। पाथ' फॉर्म पर नहीं है। मुझे फॉर्म से 'पेज। अभिभावक। आईडी' और 'पृष्ठ.Slug' मिलता है। –
और मैं 'पृष्ठ' के बाद 'पेज' पाथ बनाना चाहता हूं। माता-पिता और 'पृष्ठ। लग' बाध्य हैं। –