asp.net mvc - नेस्टेड टैगबिल्डर- टैगबिल्डर ट्री-




asp.net-mvc razor (2)

टैगबिल्डर एचटीएमएल तत्वों के निर्माण के लिए एक अच्छा कार्यान्वयन है। लेकिन कुछ- HTML तत्वों में एक और तत्व हो सकते हैं (मैंने बच्चों की तरह कहा)। मुझे एमवीसी कक्षाओं से कोई कक्षा नहीं मिली।

सवाल; क्या मुझे कुछ कक्षाओं (टैगबिल्डर ट्री, और टैगबिल्डररोड) को लागू करना चाहिए जो नेस्टेड टैग का समर्थन करते हैं या क्या मुझे कुछ याद आया?


आप अलग-अलग टैगबिल्डर में बाल तत्वों का निर्माण कर सकते हैं और अपने जेनरेट किए गए HTML को मूल टैगबिल्डर में डाल सकते हैं।

यहां एक उदाहरण दिया गया है: <select> कुछ <option> एस के साथ (उदाहरण के लिए tseness के लिए de-fatted)

TagBuilder select = new TagBuilder("select");  

foreach (var language in languages) // never ye mind about languages
{
    TagBuilder option = new TagBuilder("option");
    option.MergeAttribute("value", language.ID.ToString());

    if (language.IsCurrent)
    {
        option.MergeAttribute("selected", "selected");
    }

    option.InnerHtml = language.Description;
    // And now, the money-code:
    select.InnerHtml += option.ToString();
}

टैग बनाने के लिए टैगबिल्डर के साथ मेरी समस्या यह है कि यह बहुत ही रखरखाव योग्य दिखता है। दूसरी तरफ, स्ट्रिंगबिल्डर का एपेंडफॉर्मैट न केवल कोड को बनाए रखने योग्य बनाता है, बल्कि अच्छी दक्षता के साथ भी चलता है।

मैंने मैटस्ले की # 1 विधि में थोड़ा सुधार किया है। मैंने स्ट्रिंगबिल्डर की अपेंडफॉर्मेट विधि में केवल एक कॉल का उपयोग किया और प्रारूप को परिभाषित करने के लिए सी # स्ट्रिंग शाब्दिक का उपयोग किया। नतीजतन प्रारूप वांछित परिणाम की तरह दिखता है और दक्षता के साथ चलता है।

var sb = new StringBuilder();
    sb.AppendFormat(
     @"<div class='control-group'>
          <label class='control-label' for='{0}_{1}'>{2}</label>
          <div class='controls'>
             <input id='{0}_{1}' name='{0}[{1}]' value='{3}' />
          </div>
      </div>",
      propObj.ModelType,
      propObj.ModelProperty,
      propObj.LabelCaption,
      propObj.PropertyValue);

    return new HtmlString(sb.ToString());

उम्मीद है की यह मदद करेगा!





tagbuilder