2012-05-21 17 views
9

मैं टेलरिक ग्रिड के अंदर एक एक मोडल विंडो। लेकिन मुझे अपनी ग्रिड में छवियों को प्रस्तुत करने की आवश्यकता है ताकि मैं समझ सकूं कि मैं @ दो बार उपयोग नहीं कर सकता। इस मुद्दे के बारे में ब्लॉग पोस्ट यहां है Linkइनलाइन मार्कअप ब्लॉक को नेस्टेड नहीं किया जा सकता है। इनलाइन मार्कअप के केवल एक स्तर की अनुमति है। एमवीसी रेजर

क्या कोई मेरी सहायता कर सकता है।

मेरे कोड

@{ Html.Telerik().Window() 
    .Name("images") 
    .Title("Select an Image") 
    .Content(@<text> 

@(Html.Telerik().ComboBox() 
      .Name("AjaxComboBox66") 
      .AutoFill(true) 
      .SelectedIndex(0) 
      .BindTo(new SelectList(Model.PhotoFolders, "ID", "Name")) 
      .Filterable(filtering => filtering.FilterMode(AutoCompleteFilterMode.StartsWith)) 
      .HighlightFirstMatch(true) 
      .ClientEvents(events => events 
       .OnChange("onChange") 
      ) 
    ) 

     @(Html.Telerik().Grid<AjaxImages>() 
    .Name("Grid") 
    .DataKeys(keys => keys.Add(c => c.ID)) 
    .Columns(columns => 
    { 
     columns.Template(
      @<text> 
       <img src='@item.Url' /> 
//Here is my error. I need helper function 
      </text> 

).Title("Picture"); 

    }) 

           .DataBinding(dataBinding => dataBinding.Ajax().Select("GetImages", "UserProducts")) 

         .Scrollable(scrolling => scrolling.Enabled(true)) 
         .Sortable(sorting => sorting.Enabled(true)) 
          .Pageable(paging => paging.Enabled(true).PageSize(20).Total(100).Style(GridPagerStyles.NextPreviousAndNumeric)) 
         .Filterable(filtering => filtering.Enabled(true)) 
         .Groupable(grouping => grouping.Enabled(false)) 
         .EnableCustomBinding(true) 

         .Footer(true)) 
       </text>) 
    .Width(400) 
    .Draggable(true) 
    .Modal(true) 
    .Visible(false) 


    .Render(); 
} 

मेरे GetImages समारोह "आईडी" और "URL" के साथ json मुझे वापस जाएँ।

उत्तर

16

इन स्थितियों में एमवीसी रेजर सहायक समारोह का उपयोग किया जा सकता है। ग्रिड नियंत्रण परिभाषा के साथ सहायक कार्य बनाएँ, इस मामले में RenderGrid()

@helper RenderGrid() 
{ 
    @(Html.Telerik().Grid<AjaxImages>() 
    .Name("Grid") 
    .DataKeys(keys => keys.Add(c => c.ID)) 
    .Columns(columns => 
    { 
     columns.Template(
     @<text> 
      <img src='@item.Url' /> 
     </text> 
     ).Title("Picture"); 
    }) 
    .DataBinding(dataBinding => dataBinding.Ajax().Select("GetImages", "UserProducts")) 
} 

विंडो की सामग्री परिभाषा के अंदर सहायक कार्य को कॉल करें। यदि आवश्यक हो तो सहायक कार्यों को कई बार बुलाया जा सकता है।

@{Html.Telerik().Window() 
     .Name("images") 
     .Title("Select an Image") 
     .Content(
     @<text> 
      @RenderGrid() 
     </text>) 
     .Width(400) 
     .Draggable(true) 
     .Modal(true) 
     .Visible(false) 
     .Render(); 
} 
+0

लगभग हो गया, दोनों स्क्रीनशॉट देखें। मुझे कोई त्रुटि नहीं मिली लेकिन छवि खाली है। मैंने पाठ के रूप में प्रस्तुत करने की कोशिश की, मेरा AJAX काम कर रहा है। क्या आप जानते हैं कि मुझे अपनी छवि क्यों नहीं मिलती? http://prntscr.com/9ix3a http://prntscr.com/9ix3x –

+2

आप AJAX बाध्यकारी का उपयोग कर रहे हैं और इसलिए सर्वर बाध्यकारी मोड टेम्पलेट के बजाय क्लाइंट साइड टेम्पलेट का उपयोग करने की आवश्यकता है। इसे आज़माएं: 'कॉलम। बाउंड (सी => सी.आईडी)। क्लाइंट टेम्पलेट (" <#= ID #> ") शीर्षक (" चित्र ");' – Igorrious

+0

सही उत्तर देता है! यू नियम! –

1

पिछले MVC @helper में घोंसला@<text> टैग की अक्षमता के लिए एक समाधान के रूप में इस्तेमाल किया गया था। लेकिन एमवीसी कोर @helper में छोड़ा गया है। यहां अधिक पढ़ें:

https://github.com/aspnet/Razor/issues/715