简体   繁体   English

为asp.net mvc剃须刀编写自定义插件/扩展程序,例如kendoui和telerik

[英]Write custom plugins/extensions like kendoui and telerik for asp.net mvc razor

Telerik and kendoUI offers a number of html controls like grids, charts etc. to enhance the ui in asp.net mvc. TelerikkendoUI提供了许多html控件,例如网格,图表等,以增强asp.net mvc中的ui。 More interesting thing is they are used as html extensions and hence we can bind some model to the controls which also makes it somewhat strongly typed. 更有趣的是,它们被用作html扩展,因此我们可以将某些模型绑定到控件,这也使它具有某种强类型。 It also uses javascript libs to handle client side interactions. 它还使用javascript库来处理客户端交互。 I need to get some gist over how can we write custom plugins like kendo and telerik like building my own grid component. 我需要了解如何编写自定义插件(如kendo和telerik),如构建自己的网格组件。 What is the proper pattern that i should follow? 我应该遵循的正确模式是什么?

This is not good example but i think it is good start. 这不是一个很好的例子,但我认为这是一个好的开始。

This method generates dataTable 此方法生成dataTable

public static string GenerateTableHtml<TValue>(IEnumerable<TValue> model, string DeleteUrl, string EditUrl) 
        {
            StringBuilder Table = new StringBuilder();

            Table.AppendLine("<script type='text/javascript'> $(document).ready(function () {"
                            + "$('.btnDelete').click(function () {"
                            + "var url = $(this).attr('dropzone');"
                            + "$('#dialog-form').attr('action', url);})"
                            + "})</script>");

            Table.AppendLine(" <div class=\"dataTables_wrapper\"><div class=\"\">");

            string TableButtonsTemplate = "<td><div class=\"table_buttons\">"
                                        + "<a href=\"{0}\"><img src=\"../Images/icons/dark/pencil.png\")\" title=\"რედაქტირება\" /></a>"
                                        + "<a href=\"#\" id=\"opener\" class=\"btnDelete\" dropzone=\"{1}\">"
                                        +"<img class=\"\" src=\"../Images/icons/dark/close.png\")\" title=\"წაშლა\" /></a>"
                                        + "</div></td>";

            string TableButtons = String.Empty;
            bool HaveActionButtons = false;
            string rowID = string.Empty;

            if (String.IsNullOrEmpty(DeleteUrl) == false || string.IsNullOrEmpty(EditUrl) == false)
            {
                HaveActionButtons = true;
            }

            Table.AppendLine("<table class=\"display dTable\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">");
            Table.AppendLine("<thead>");
            Table.AppendLine("<tr>");

            int ColumnIndex = 0;
            int rowIndexer = 0;

            var fType = model.GetType().FullName;
            var startIndex = fType.IndexOf("[[") + 2;
            var type = fType.Substring(startIndex, fType.Length - startIndex - 2);

            foreach (var item in model)
            {

                if (ColumnIndex == 0)
                {
                    var properties = item.GetType().GetProperties();

                    foreach (var prop in properties)
                    {
                        var metaData = ModelMetadataProviders.Current.GetMetadataForProperty(null,
                                       Type.GetType(type), prop.Name);

                        if (metaData.DisplayName != null)
                        {
                            Table.AppendLine("<th class=\"ui-state-default\" rowspan=\"1\" colspan=\"1\">" + metaData.DisplayName + "</th>");
                        }
                        else
                        {
                            Table.AppendLine("<th class=\"ui-state-default\" rowspan=\"1\" colspan=\"1\">" + prop.Name + "</th>");
                        }
                    }

                    Table.AppendLine("<th></th>");
                    Table.AppendLine("</tr>");
                    Table.AppendLine("</thead>");
                    Table.AppendLine("<tbody>");
                }

                foreach (var value in item.GetType().GetProperties().Select(x => x.GetValue(item, null)))
                {
                    int rowCount = item.GetType().GetProperties().Select(x => x.GetValue(item, null)).Count();
                    rowIndexer++;

                    if (rowIndexer != rowCount)
                    {
                        if (rowIndexer == 1)
                        {
                            Table.AppendLine("<tr class=\"gradeA odd\">");
                        }

                        if (value != null)
                        {
                            string val = value.ToString();
                            Table.AppendLine("<td>" + val + "</td>");
                            rowID = item.GetType().GetProperty("ID").GetValue(item, null).ToString();
                        }
                        else
                        {
                            Table.AppendLine("<td></td>");
                        }
                    }
                    else
                    {
                        if (value != null)
                        {
                            Table.AppendLine("<td>" + value.ToString() + "</td>");
                        }
                        else
                        {
                            Table.AppendLine("<td></td>");
                        }

                        if (HaveActionButtons == true)
                        {
                            Table.AppendLine(String.Format(TableButtonsTemplate, EditUrl + rowID, DeleteUrl + rowID));
                        }

                        Table.AppendLine("</tr>");

                        if (rowIndexer != item.GetType().GetProperties().Count())
                        {
                            Table.AppendLine("<tr class=\"gradeA odd\">");
                        }
                    }
                }
                rowIndexer = 0;
                ColumnIndex++;
            }

            Table.AppendLine("</tbody></table></div></div>");

            Table.AppendLine(String.Format(Resources.MainResources.ModalDialogConfirm, "Confirmation",
                "<strong>Warning!</strong><br /> Are you sure you want to delete user?", ""));

            return Table.ToString();
        }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何在ASP.NET MVC的过滤器Telerik Extensions中使用AND更改AND - how to change the AND with OR in a filter Telerik Extensions for ASP.NET MVC asp.net mvc 3 razor自定义助手 - asp.net mvc 3 razor custom helper 如何使用asp.net MVC剃须刀在Telerik网格中显示加载图像 - how to show loading image in telerik grid using asp.net mvc razor 具有可编辑外键下拉列的ASP.NET MVC 3 Telerik Razor网格 - ASP.NET MVC 3 Telerik Razor grid with editable foreign key dropdown column @ Html.Telerik()。网格列问题.ASP.NET MVC 2011的Telerik扩展.Q3.1115 - @Html.Telerik().Grid column problems.Telerik Extensions for ASP.NET MVC 2011.Q3.1115 ASP.NET MVC3:Razor GetHTML Table自定义布局 - ASP.NET MVC3: Razor GetHTML Table custom layout Writing Asp.net web forms Application URL Like Asp.net MVC (that uses Razor ) URL - Writing Asp.net web forms Application URL Like Asp.net MVC (that uses Razor ) URL 网格中的Telerik + ASP.NET MVC DropdownList - Telerik + ASP.NET MVC DropdownList in Grid 重新加载Telerik网格asp.net MVC - Reloading telerik grid asp.net mvc ASP.NET MVC Q1 2010的Telerik扩展:未编译:显示警告:找不到引用的组件&#39;System.Web.MVC&#39; - Telerik Extensions for ASP.NET MVC Q1 2010: Not compiling: Shows warning :The referenced component 'System.Web.MVC' could not be found
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM