2014-07-30 4 views
2

У меня есть большая проблема с вставкой значения в Kendo DateTimePicker внутри Kendo Grid из json result. Таким образом, у меня есть две формы на странице. В первом я загружаю файл:Kendo DateTimePicker значение set from json result

@using (Html.BeginForm("GetImportSalesModelFromFile", "ExportImport", FormMethod.Post, new { id = "GetImportSaleModelFromFileForm", enctype = "multipart/form-data" })) 
{ 
    <input id="importFileInput" type="file" accept="text/csv" name="file" class="user-success" required> 
    <input style="width: 100px;" type="submit" value="Add"> 
} 

На подчиненной формы под названием функции

$('#GetImportSaleModelFromFileForm').submit(function(e) { 
    e.preventDefault(); 
    var url = $(this).attr('action'); 
    var xhr = new XMLHttpRequest(); 
    var fd = new FormData(); 
    fd.append("file", document.getElementById('importFileInput').files[0]); 
    xhr.open("POST", url, true); 
    xhr.send(fd); 
    xhr.addEventListener("load", function(event) { 
     AppendImportModel(JSON.parse(event.target.response)); 
    }, false); 
}); 

В контроллере я получаю необходимую импорт модели

public ActionResult GetImportSalesModelFromFile(HttpPostedFileBase file) 
    { 
     var importModel = _importService.ConstructSaleImportModel(file.InputStream, file.ContentType); 
     return Json(importModel, JsonRequestBehavior.AllowGet); 
    } 

В функции AppendImportModel я анализирую результат и вставить его в сетке кендо во второй форме

@(Html.Kendo().Grid<ImportSaleItemModel>().Name("ImportSalesGrid") 
          .DataSource(dataSource => dataSource.Ajax()) 
          .Events(x => x.DataBound("initMenus")) 
          .Columns(columns => 
          { 
           columns.Bound(x => x.Goods.PictureId) 
            .ClientTemplate("<img style='height: 50px;' src='" + Url.Action("Contents", "FileStorage", new { id = "#= Goods.PictureId #" }) + "'/>") 
            .Title("") 
            .Sortable(false) 
            .HtmlAttributes(new Dictionary<string, object> { { "style", "padding: 3px !important; height: 52px !important; width:52px !important;" } }); 
           columns.Bound(x => x.Goods.Title) 
            .ClientTemplate("<a onclick='ShowInfoGoodWindow(#= Goods.Id #)'>#= Goods.Title #</a><br>" + 
                "<span><b>#= Goods.Article #</b> <descr>#= Goods.Description #</descr></span><br><input type='hidden' name='ImportedGoodList[#= index(data)#].Id' value='#= Goods.Id #' />") 
            .Title("Description"); 
           columns.Bound(x => x.Price) 
            .ClientTemplate("<input class='priceEditor' maxlength='10' style='width:50px; text-align: center;' type='text' name='ImportedGoodList[#= index(data)#].Price' onkeypress='return isPriceKey(event)' oninput='$(this).get(0).setCustomValidity(clearValidation);' value='#=Price.ParsedValue #'>") 
            .HtmlAttributes(new Dictionary<string, object> { { "style", "text-align: center;" } }) 
            .Title("Price"); 
           columns.Bound(x => x.Discount) 
            .ClientTemplate("<input class='discountEditor' maxlength='10' style='width:50px; text-align: center;' type='text' name='ImportedGoodList[#= index(data)#].Discount' onkeypress='return isPriceKey(event)' oninput='$(this).get(0).setCustomValidity(clearValidation);' value='#=Discount.ParsedValue #'>") 
            .HtmlAttributes(new Dictionary<string, object> { { "style", "text-align: center;" } }) 
            .Title("Discount"); 
           columns.Bound(x => x.DepartmentId) 
            .HtmlAttributes(new { @class = "templateCell" }) 
            .ClientTemplate(Html.Kendo().DropDownList().Name("Department#=LineId#").BindTo(Model.Departments).Value("#= DepartmentId #").ToClientTemplate().ToHtmlString()) 
            .Title("Department"); 
           columns.Bound(x => x.SaleDateTime) 
            .HtmlAttributes(new { @class = "templateCell" }) 
            .ClientTemplate(Html.Kendo().DateTimePicker().Name("SaleDateTime#=LineId#").Value("#= ConvertedSaleDateTime #").ToClientTemplate().ToHtmlString()) 
            .Title("Sale Date"); 
           columns.Bound(x => x.SellerId) 
            .HtmlAttributes(new { @class = "templateCell" }) 
            .ClientTemplate(Html.Kendo().DropDownList().Name("Seller#=LineId#").BindTo(Model.Sellers).Value("#= SellerId #").ToClientTemplate().ToHtmlString()) 
            .Title("Seller"); 
           columns.Bound(x => x.IsCashPayment) 
            .ClientTemplate("<input type='checkbox' id='IsCashPayment#=LineId#' checked='#= IsCashPayment.ParsedValue #' class='regular-checkbox'/><label for='IsCashPayment#=LineId#'></label> Yes") 
            .Title("Is Cash Payment"); 
          }) 
          ) 

Во всех колонках с помощью "# = значение #" отлично работает, но не в этой строке

.ClientTemplate(Html.Kendo().DateTimePicker().Name("SaleDateTime#=LineId#").Value("#= ConvertedSaleDateTime #").ToClientTemplate().ToHtmlString()) 

"# = ConvertedSaleDateTime #" не изменились по реальной стоимости, но если я пишу

.ClientTemplate("#= ConvertedSaleDateTime #") 

I получит правильное значение "10/07/2013 13:15". И если я пишу

.ClientTemplate(Html.Kendo().DateTimePicker().Name("SaleDateTime#=LineId#").Value("10/07/2013 13:15").ToClientTemplate().ToHtmlString()) 

я буду получать Кендо DateTimePicker внутри сетки со значением «10/07/2013 13:15» Как я могу установить значение этого DateTimePicker от ConvertedSaleDateTime? Пожалуйста, помогите мне. Заранее спасибо.

ответ

1

Я решил проблему с помощью jQuery. Возможно, кому-то нужно это решение или что-то более красивое. В шаблоне клиентской SaleDateTime columnt я писал:

columns.Bound(x => x.SaleDateTime).ClientTemplate("<input class='saleDateTimeEditor' id='SaleDateTime#=index(data)#' name='ImportedSalesList[#=index(data)#].SaleDateTime' value='#= ConvertedSaleDateTime #'>") 

И в DataBound случае моего кендо сетки я инициализируюсь все кендо DateTimePickers:

$('.saleDateTimeEditor').each(function() { 
     var id = $(this).attr('id'); 
     var value = new Date(Date.parse($(this).val())); 
     $("#" + id).kendoDateTimePicker({ 
      value: value, 
      max: new Date(Date.now()) 
     }); 
     $('#'+id).attr('readonly', 'readonly'); 
    }); 

ConvertedSaleDateTime в формате «гггг/мм/дд чч: мм: ss "