Telerik MVC Extension - Сетка, загруженная в Tabstrip, не поддерживает clientEvents - PullRequest
0 голосов
/ 02 апреля 2011

Я столкнулся с серьезной проблемой, пытаясь работать в клиентских приложениях с сеткой asp.net mvc telerik. Вот два разных сценария: Когда я помещаю следующий скрипт в вид или частичный вид, он работает нормально;

   <%= Html.Telerik().Grid<Plan>()
            .Name("Grid")
            .DataKeys(keys => keys.Add(p => p.StaffId))
            .ToolBar(commands => { commands.SubmitChanges();
                                     commands.Position(GridToolBarPosition.Bottom);
            }).PrefixUrlParameters(false)

            .DataBinding(dataBinding =>
                dataBinding.Ajax()
                        .Select("_SelectBatchEmployees", "Employee")
                    .Update("_SaveBatchEmployees", "Employee")
            )
            .Columns(columns =>
            {
                columns.Bound(p => p.FullName).Width(320).ReadOnly(true);
                columns.Bound(p => p.Title).Width(220).ReadOnly(true);
                columns.Bound(p => p.PerformanceRating).Title("Perf. Rating").Format("{0:n}").Width(80);
                columns.Bound(p => p.RecommendedIncreaseAmountFrom).Width(80);

            })
            .ClientEvents(events =>
                    events.OnDataBinding("Grid_onDataBinding").OnError("Grid_onError").OnEdit("onEdit").OnDataBound("onDataBound"))
            .Editable(editing => editing.Mode(GridEditMode.InCell))
            .Pageable(page => page.PageSize(40))
            .Scrollable()
            .Sortable()
            .Footer(true)

            %>


     <script type="text/javascript">
         function Grid_onError(args) {
             if (args.textStatus == "modelstateerror" && args.modelState) {
                 var message = "Errors:\n";
                 $.each(args.modelState, function (key, value) {
                     if ('errors' in value) {
                         $.each(value.errors, function () {
                             message += this + "\n";
                         });
                     }
                 });
                 args.preventDefault();
                 alert(message);
             }
         }
         function onDataBound(e) {
             //alert(e.dataItem);
         }

         function onEdit(e) {
             var dataItem = e.dataItem;
             var mode = e.mode;
             var form = e.form;
             var priceTextBox = $(form).find('#Grade');
             dataItem.RecommendedIncreaseAmountFrom = 10 * 5;

             e.preventDefault();


         }

         function Grid_onDataBinding(e) {
             var grid = $(this).data('tGrid');
             if (grid.hasChanges()) {
                 if (!confirm('You are going to lose any unsaved changes. Are you sure?')) {
                     e.preventDefault();
                 }
             }
         }

        </script>

Но когда я частично загружаю view через tabstrip по требованию загрузки, он не работает. И когда я удалил часть клиентов, это начало работать ?? Я не знаю, в чем причина, но мне нужно работать, пожалуйста, помогите мне, и вот мой код:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Edit.Master" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>

    <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
        Index
    </asp:Content>

    <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <%=
                Html.Telerik().TabStrip()
                    .Name("planingTabs").HtmlAttributes(new {style = "overfloat:auto"})
                    .Items(parent => parent.Add() //.HtmlAttributes(new {style = "overfloat:auto"})
                                         .Text("Test")
                                         .LoadContentFrom("PlanGrid", "Employee").Selected(true))

            %>

    </asp:Content>

Ниже приведен код контроллера:

public ActionResult Index()
            {
                return View();
            }

            public ActionResult PlanGrid()
            {
                return PartialView();
            }

            [GridAction]
            public ActionResult _SelectBatchEmployees()
            {
                            return View(new GridModel { Data = _employeeRepository.GetAll()});
            }
            [AcceptVerbs(HttpVerbs.Post)]
            [CultureAwareAction]
            [GridAction]
            public ActionResult _SaveBatchEmployees([Bind(Prefix =
                "inserted")]IEnumerable<Plan> insertedProducts,
                [Bind(Prefix = "updated")]IEnumerable<Plan> updatedProducts,
                [Bind(Prefix = "deleted")]IEnumerable<Plan> deletedProducts)
            {

                //if (insertedProducts != null)
                //{
                //    foreach (var product in insertedProducts)
                //    {
                //        SessionProductRepository.Insert(product);
                //    }
                //}
                if (updatedProducts != null)
                {
                    foreach (var employee in updatedProducts)
                    {
                        var target = _employeeRepository.One(p => p.StaffId == employee.StaffId);
                        if (target != null)
                        {
                            //target.ProductName = product.ProductName;
                            //target.UnitPrice = product.UnitPrice;
                            //target.UnitsInStock = product.UnitsInStock;
                            //target.LastSupply = product.LastSupply;
                            //target.Discontinued = product.Discontinued;


                            _employeeRespository.Save();
                        }
                    }
                }
                //if (deletedProducts != null)
                //{
                //    foreach (var product in deletedProducts)
                //    {
                //        SessionProductRepository.Delete(product);
                //    }
                //}
                return View(new GridModel { Data = _employeeRespository.GetAll() });
            }

1 Ответ

0 голосов
/ 04 апреля 2011

Это потому, что файлы JavaScript в Grid не загружены.Раздел справки по устранению неполадок объясняет это.Решение состоит в том, чтобы вручную зарегистрировать файлы JavaScript .Есть рабочий проект, показывающий, как это сделать здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...