当前位置: 首页 > 知识库问答 >
问题:

在Kendo调度程序自定义模板中绑定DropDownList(ASP.NET MVC包装版本)

卫开济
2023-03-14

我正在使用ASP。NET MVC剑道UI包装器,我正在尝试在一个自定义模板(x-Kendo-template)中绑定几个下拉列表。我不知道如何使用ASP。NET MVC包装器(这类似于这个问题:如何使用调度程序将DropDownList绑定到编辑器模板内的数据源?)。

有一些使用Kendo Web版本的例子,但没有完整的例子显示使用自定义弹出编辑器和包含从URL(json数据)提取数据的下拉列表的调度程序。

是否有一个端到端的示例?我可以用数据加载调度程序。问题在于自定义模板和dropdownlist绑定。

编辑:

经过广泛的搜索,我偶然发现了一个“入门”页面,来自Telerik,关于在ASP. NET MVC中使用Kendo UI调度器。他们(Telerik)真的需要在Demos到Documsion到API和示例之间做更好的交叉链接(下面是示例)

我还创建了一篇博客文章,它为调度器包装了所有内容(从数据库表到视图),您可以在这里看到。剑道用户界面调度与ASP。NET MVC和Peta Poco

该示例说明了演示和文档没有说明的一些内容,例如,他们在其联机示例中使用的ViewModel:

C#查看模型

public class Projection : ISchedulerEvent
{
    public string Title { get; set; }
    public DateTime Start { get; set; }
    public DateTime End { get; set; }
    public string Description { get; set; }
    public bool IsAllDay { get; set; }
    public string Recurrence { get; set; }
    public string RecurrenceRule { get; set; }
    public string RecurrenceException { get; set; }

    // Custom Field
    public int EventId { get; set; }
    public int CustomerId { get; set; }
}

用于计划程序的ViewModel必须从IsSchedulerEvent类继承,否则将无法正常工作。

剃刀视图

Razor视图非常直观,尽管您遇到的大多数演示都会显示通过服务器端(从控制器)传递的数据。在这里,我通过Ajax方法(创建、读取、更新、销毁)来实现这一点。

@(Html.Kendo().Scheduler<KendoUISchedulerDemo.Models.Projection>()
    .Name("scheduler")
    .Date(DateTime.Today)
    .Height(600)
    .DataSource(d => d
        .Model(m =>
        {
            m.Id(f => f.EventId);
            m.Field(f => f.Title);
            m.Field(f => f.CustomerId);
            m.Field(f => f.Description);
            m.RecurrenceId(f => f.Recurrence);
        })
        .Read("Read", "Shared", new { Area = "Events" })
        .Create("Create", "Shared", new { Area = "Events" })
        .Destroy("Destroy", "Shared", new { Area = "Events" })
        .Update("Update", "Shared", new { Area = "Events" })
)
.Events( events =>
    {
        events.Add("ABC.events.SchedulerAdd");
    })
.Editable(edit =>
{
    edit.TemplateId("schedulerTemplate");
})
)

将数据源与上面的ajax调用结合使用的要点是,它允许我们将方法放在一个单独的控制器中,这样我们就可以保持显示视图的控制器干净。

Razor视图-剑道模板(用于事件的弹出编辑器

这是x-kendo-template的脚本块,在kendo Scheduler中创建和编辑事件时,该脚本块将覆盖默认弹出窗口。这个脚本几乎是狂野的西部,你可以在其中做任何你想做的事情,它默认与剑道MVVM模型绑定。尽管如此,还是有点保留,因为没有一种文档化的方法“扩展”ViewModel,以正确地从ASP中的自定义下拉列表中放置数据源。NET MVC计划程序的包装(版本)。(这也使用了Twitter引导)

<script type="text/x-kendo-template" id="schedulerTemplate">
<div class="form-group">
    <div class="col-md-5">
        @Html.Label("title", "Title", new { @class = "col-md-2 control-label" })
        <div class="col-md-10">
            <input class="k-textbox" data-bind="value: title" />
        </div>
    </div>
</div>
<div class="form-group mTop10">
    @Html.Label("CustomerId", "Customer", new { @class = "col-md-2 control-label" })
    <div class="col-md-10">
        <input id="CustomerId" class="w450" />
    </div>
</div>
<div class="form-group mTop10">
    <div class="left col-md-5">
        @Html.Label("start", "Start", new { @class = "col-md-2 control-label left" })
        <div class="col-md-10">
            <input name="start" type="text" required  data-type="date" data-role="datetimepicker" data-bind="value: start,invisible: isAllDay" />
            <input name="start" type="text" required  data-type="date" data-role="datepicker" data-bind="value: start,visible: isAllDay" /> 
        </div>
    </div>
    <div class="left col-md-5">
        @Html.Label("end", "End", new { @class = "col-md-2 control-label left" })
        <div class="col-md-10">
            <input name="end" type="text" required data-type="date" data-role="datetimepicker" data-bind="value: end ,invisible:isAllDay" />    
            <input name="end" type="text" required data-type="date" data-role="datepicker" data-bind="value: end ,visible:isAllDay" />
        </div>
    </div>
</div>
<div class="clear"></div>
<div class="form-group mTop10">
    @Html.Label("isAllDay", "All Day", new { @class = "col-md-2 control-label" })
    <div class="col-md-10">
        <input type="checkbox" name="isAllDay" data-type="boolean" data-bind="checked:isAllDay">
    </div>
</div>
</script>

JsonResults(在控制器中)

下面是CRUDJSON结果。本例中的Create、Update和Destroy JsonResults已被修剪。

public virtual JsonResult Read([DataSourceRequest] DataSourceRequest request)
    {
        var data = new List<Projection>();
        data.Add(new Projection()
        {
            EventId = 1,
            Start = DateTime.Now.AddDays(-2),
            End = DateTime.Now.AddDays(-2).AddHours(2),
            IsAllDay = false,
            CustomerId = 1,
            Description = "Booked for plumbing",
            Title = "Manchester Residence"
        });

        return Json(data.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
    }

public virtual JsonResult Create([DataSourceRequest] DataSourceRequest request, Projection evt)
    {
        if (ModelState.IsValid)
        {
            // Other code here
        }

        return Json(new[] { evt }.ToDataSourceResult(request, ModelState));
    }

public virtual JsonResult Update([DataSourceRequest] DataSourceRequest request, Projection evt)
    {
        if (ModelState.IsValid)
        {
            // Other code here
        }

        return Json(new[] { evt }.ToDataSourceResult(request, ModelState));
    }

public virtual JsonResult Destroy([DataSourceRequest] DataSourceRequest request, Projection evt)
    {
        if (ModelState.IsValid)
        {
            // Other code here
        }

        return Json(new[] { evt }.ToDataSourceResult(request, ModelState));
    }

JavaScript

下面是包含在独立JS文件中的JavaScript,该文件对应于我的计划程序“添加”事件。我没有显示“编辑”事件,因为它几乎是相同的想法,你应该能够弄清楚。

ABC.Events.SchedulerAdd = function (e) {

    function GetCustomers(value) {
        var url = "/Events/Shared/GetCustomers"
        var success = function (result) {
            if (result != null) {
                $("#CustomerId").kendoDropDownList({
                    dataTextField: "FullName",
                    dataValueField: "CustomerId",
                    dataSource: new kendo.data.DataSource({ data: result })
                });
            }
        };

        $.ajax({ url: url, success: success });
    }

    GetCustomers();
};

这个JavaScript函数中的一个关键点是,我们将字段转换为Kendo DropDownList,并在接收JsonResult的同时连接数据源(未显示,但它是一个简单的Json对象)。另一个关键是在创建新剑道时如何连接数据源。数据数据源。如果您试图简单地连接JsonResult,它将无法工作。

结论

这是在使用ASP时在调度程序模板(弹出窗口)中填充下拉列表的一种解决方法。NET MVC剑道UI的包装器版本。我对一种更好的方式持开放态度,在这种方式中,我设想将Json列表数据添加到Kendo调度器使用的内部MVVM中,但没有ASP的文档。NETMVC或如何实现它的示例,这是一种工作方式。

编辑#2-Telerik ASP。NETMVC示例

我最终收到了Telerik Support关于此问题的回复,并被定向到以下链接:http://www.telerik.com/support/code-library/custom-editor-9fd60fca3c02 这里有一个示例MVC项目,展示了如何在ASP中使用自定义编辑器、包含数据源的下拉列表。NET MVC。对于我来说,究竟为什么文档与这些项目之间没有明显的联系,这显然是一个谜。

共有1个答案

尹善
2023-03-14

你找到答案了吗?我正在做一些类似的事情,并且已经设法让其中一些工作,我有一个可能会有所帮助的演示。我的不是100%现在,但我正在到达那里。我有一个链接到资源的自定义模板。我的问题是,有时模型无法验证,因此我无法在控制器中获得返回Jason方法的帖子。你见过这个例子吗?

 类似资料:
  • 我正在使用剑道用户界面和角度网格应用程序。我的网格由JSON数据(单独的文件)填充,我正在使用angular service: 我的JSON数据: 我的Angular服务: 这是我的控制器: 这是我的JSON,其中包含documentType的数据: 这是我的HTML: 在超文本标记语言中,我有一个包含文档类型数据的dropdown列表,我的dropdown列表中填充了JSON数据。但是,问题在于

  • 我正在为log4j2编写一个自定义包装器。使用https://logging.apache.org/log4j/2.x/manual/customloglevels.html#Customlogggers 要求是根据要记录的对象类型选择追加器。我想的方法是扩展log4j2记录器并覆盖log方法(如info),在这些方法中检查对象类型并调用所需的appender。 现在我想让我的应用程序使用slf4

  • 我在这里准备了一个简单的道场:http://dojo.telerik.com/iQERE 脚本: 我在另一个数组中有一个数组,我想用剑道模板以表格/网格的形式呈现它。第一个数组的项是行,内部数组的项是列。 我在谷歌上搜索并发现了这种技术:模板中的模板 问题是: 1) 如何绑定嵌套数组项的值? 我尝试,但它不起作用。 我认为,因为使用这种技术,这个模板的“真实数据”是外部数组,而不是内部数组! 尝试

  • 问题内容: 我有一个使用Bootstrap中的标记的表单,如下所示: 这里有很多样板代码,我想简化为一个新的指令-form-input,如下所示: 产生: 我通过一个简单的模板完成了很多工作。 但是,当我开始添加更多高级功能时,我就陷入了困境。 如何在模板中支持默认值? 我想在指令中将“ type”参数公开为可选属性,例如: 但是,如果未指定任何内容,则默认为。我该如何支持? 如何根据属性的存在/

  • 问题内容: Helm允许在Kubernetes的资源文件中使用Go模板。 通常使用一个名为的文件通过以下语法定义Go模板助手: 然后可以在资源文件中使用它,如下所示: 问题 如何在其他帮助程序定义中使用定义的帮助程序? 例如,如果我有一个用于应用程序名称的助手,并想在定义入口主机名的助手的定义中使用该助手,该怎么办? 我尝试了几种其他方式来调用其他定义中的帮助器。鉴于此基本辅助功能: 我尝试了以下

  • 从MinDoc v0.13及以上版本开始支持自定义模板(仅Markdown编辑器)。 创建自定义模板 用户可在编辑项目时将编辑器内的内容报错为模板: 点击保存按钮右侧的公文包按钮会弹出保存为模板的界面: 填写模板名称点击立即保存即可。 全局模板是指,在其他项目中可用,目前仅支持管理员保存全局模板,非管理员及时选中了全局,保存时也是仅项目内可用。 使用自定义模板 点击编辑器上的模板按钮可以显示选择模