2013-08-29 6 views
6

मेरे पास दो-परत पदानुक्रमिक ग्रिड है जो मैं AJAX का उपयोग करने के लिए सर्वर पक्ष बाध्यकारी से आगे बढ़ रहा हूं। AJAX डेटा के दोनों परतों के लिए पढ़ता है सही तरीके से काम कर रहा है हालांकि मुझे क्लाइंट टेम्पलेट का उपयोग सशर्त तर्क के आधार पर मेरे कॉलम प्रस्तुत करने में कठिनाई हो रही है।एक एमवीसी केंडो ग्रिड के AJAX बाध्यकारी में क्लाइंट टेम्पलेट अभिव्यक्तियों का उपयोग कैसे करें?

नीचे सर्वर-साइड बाइंडिंग संस्करण है। मैं समझता हूँ कि मैं एक ही प्रभाव के लिए ClientTemplate और भाव # = # उपयोग करने के लिए है, लेकिन मैं दो समस्याओं कर रहा हूँ:

  1. कैसे बढ़ाने के लिए चर 'मैं' प्रत्येक पंक्ति के लिए तो मैं CheckBoxFor का उपयोग करें और एचटीएमएल सहायक तरीकों की तरह कर सकते हैं?
  2. क्लाइंट टेम्पलेट अभिव्यक्ति का उपयोग करने के लिए @ को कैसे परिवर्तित करें। नोट सशर्त तर्क मॉडल

एक अभिव्यक्ति को यह परिवर्तित दृश्य के मॉडल के गुणों और भी सशर्त तर्क के साथ बाध्य तत्व (MyViewModel) के गुणों गुण के मिश्रण का प्रयोग का उपयोग करता है सबसे उपयोगी होगा।

var i = -1; 

@(Html.Kendo().Grid<MyViewModel>() 
    .Name("grid") 
    .Columns(columns => 
    { 
    columns.Bound(c => c.Selected).Title("") 
     .Template(
     @<text> 
      @{i++;} 
      @if (Model.Permissions.HasInsertAccess && item.Status == Status.Created) 
      { 
      <input type="hidden" name="MyViewModels.Index" value="@i" /> 
      @Html.CheckBoxFor(m => m.MyViewModels[i].Selected) 
      } 
      </text>); 

      columns.Bound(c => c.Id) 
      .Template(@<text>@Html.HiddenFor(m => m.MyViewModels[i].Id)@item.Id</text>) 

उत्तर

5

कृपया नीचे दिए गए कोड स्निपेट के साथ प्रयास करें।

देखें

@model MvcApplication1.Models.TestModels 

<script type="text/javascript"> 
var rowNumber = 0; 

function resetRowNumber(e) { 
    rowNumber = 0; 
} 

function renderNumber(data) { 
    return ++rowNumber; 
} 

function renderRecordNumber(data) { 
    var page = parseInt($("#Grid").data("kendoGrid").dataSource.page()) - 1; 
    var pagesize = $("#Grid").data("kendoGrid").dataSource.pageSize(); 
    return parseInt(rowNumber + (parseInt(page) * parseInt(pagesize))); 
} 

</script> 
@(Html.Kendo().Grid<MvcApplication1.Models.TestModels>() 
.Name("Grid") 
.Columns(columns => 
{ 
    columns.Bound(p => p.ID); 
    columns.Bound(p => p.Name); 

    columns.Template(t => { }).Title("Row No").ClientTemplate("# if ('" + @Model.Permissions.HasValue.ToString().ToLower() + "' == 'true') { #" + 
     "<input type='text' name='MyViewModels.Index' value='#= renderNumber(data) #' /> " + 
     "# } #"); 

}) 
.Pageable(x => x.PageSizes(new int[] { 10, 20, 30, 50 }).Refresh(true)) 
.Sortable() 
.Filterable() 
.DataSource(dataSource => dataSource 
    .Ajax() 
     .Read(read => read.Action("Grid_Read", "Home")) 

) 
    .Events(ev => ev.DataBound("resetRowNumber")) 
) 

नियंत्रक

public ActionResult Index() 
{ 
     TestModels model = new TestModels(); 
     model.Permissions = true; //Please comment this line and check 
     return View(model); 
} 

public ActionResult Grid_Read([DataSourceRequest] DataSourceRequest request) 
{ 
     List<TestModels> models = new List<TestModels>(); 

     for (int i = 0; i < 50; i++) 
     { 
      TestModels t1 = new TestModels(); 
      t1.ID = i; 
      t1.Name = "Name" + i; 
      models.Add(t1); 

     } 

     return Json(models.ToDataSourceResult(request)); 
} 

मॉडल

public class TestModels 
{ 
    [Display(Name = "ID")] 
    public int ID { get; set; } 

    [Display(Name = "Name")] 
    public string Name { get; set; } 

    public bool? Permissions { get; set; } 
} 

ऊपर के साथ करने का प्रयास करें सांकेतिक टुकड़ा। मुझे कोई चिंता होने पर बताएं।

+1

धन्यवाद, अच्छा काम करता है। पंक्ति वृद्धि का उपयोग करने के बजाय मैंने केंडो-ग्रिड द्वारा उत्पन्न यूआईडी का उपयोग करने का निर्णय लिया। यह शर्म की बात है कि क्लाइंट टेम्पलेट एमवीसी एचटीएमएल कक्षाओं के साथ अच्छी तरह से काम नहीं करता है क्योंकि अब मुझे बदसूरत एचटीएमएल लिखना है। क्या आपको पता है कि सर्वर पर एजेक्स बाध्यकारी के साथ मिश्रण करना संभव है? मॉडल से पहला ग्रिड और फिर जब आप अजाक्स कॉल करने के लिए पंक्ति का विस्तार करते हैं? मैंने कोई फायदा नहीं उठाए कई तरीकों की कोशिश की। – David

संबंधित मुद्दे