javascript - 下拉列表中的剑道文本框
问题描述
可以在 Kendo 的下拉列表中创建文本框吗?当用户在列表中找不到他需要的东西时,应该有文本框来手动设置一些值。
落下:
@(Html.Kendo().DropDownList()
.Name("Id")
.DataTextField("StringValue")
.DataValueField("Id")
.SelectedIndex(0))
javascript:
$('#AttributeValue_Id').kendoDropDownList({
dataSource: dataSource,
dataTextField: "Text",
dataValueField: "Value",
optionLabel: '@Html.Raw(T("Product.Attribute.SelectValue"))',
dataBound: function () {
$('#AttributeValue_Id').data('kendoDropDownList').select(0);
}
});
此下拉列表中的值取决于另一个下拉列表,我们在其中选择属性,然后此下拉列表动态获取新数据。有人知道任何解决方案吗?
解决方案
好的,我解决了这个问题。解决方案是:当下拉过滤器上的元素不存在时,我可以写入我的字符串值并重定向到 AddNew 函数。无数据模板的 Javascript:
<script id="noDataTemplate" type="text/x-kendo-tmpl">
<div>
Didn't find the element
</div>
<br />
<button class="k-button" onclick="addNew('#: instance.element[0].id #', '#: instance.filterInput.val() #')">Add new value</button>
AddNew 函数是获取小部件元素和我的值。如果用户确认脚本将重定向到控制器发送所需值的操作 - 来自模型的 productId、来自参数的值和来自第一个下拉列表的 attributeDefinitionId 值:
function addNew(widgetId, value) {
var widget = $("#" + widgetId).getKendoDropDownList();
var attributeDefinition = $('#AttributeDefinition').data('kendoDropDownList').value();
var dataSource = widget.dataSource;
if (confirm("Are you sure?")) {
$.ajax({
url: '@Url.Action("AddAttributeValue", "Product")' + '?productId=@Model.Id' + '&value=' + value + '&attributeDefinition=' + attributeDefinition,
cache: false,
}).done(function () {
var grid = $("#attributesGrid").data("kendoGrid");
grid.dataSource.read();
});
dataSource.one("sync", function () {
widget.select(dataSource.view().length - 1);
});
dataSource.sync();
}
};
在控制器中,我得到这些值并将它们插入数据库:
public ActionResult AddAttributeValue(int productId, string value, int attributeDefinition)
{
if (value != null)
{
try
{
var model = attributeValueRepository.Insert(new ProductAttributeValue()
{
IsCustom = true,
StringValue = value,
AttributeDefinitionId = attributeDefinition,
});
productAttributeRepository.Insert(new ProductAttribute()
{
AttributeValueId = model.Id,
ProductId = productId
});
} catch
{
AddErrorFlashMessage(T("Product.Attribute.AttributeValueError"));
return BadRequest();
}
}
return Ok();
}
编辑
差点忘了,我也设置了dropDown noDataTemplate:
$('#AttributeValue_Id').kendoDropDownList({
dataSource: dataSource,
dataTextField: "Text",
dataValueField: "Value",
optionLabel: '@Html.Raw(T("Product.Attribute.SelectValue"))',
filter: "startswith",
noDataTemplate: $("#noDataTemplate").html(),
dataBound: function () {
$('#AttributeValue_Id').data('kendoDropDownList').select(0);
}
});
谢谢大家的提示
推荐阅读
- azure-ad-b2c - 删除 AD B2C 租户 Powershell
- android - 来自 AutoCompleteTextView 的 GetSelectedItem/值 [不工作]
- c++ - 使用大括号进行结构初始化
- c++ - Qt:如何从应用程序的资源中打开 pdf 文件?
- node.js - React、node js、mongoDB - 如何使用 FormData 进行发布、放置、删除?
- python-3.x - 将远程 linux 系统时间同步到本地 windows 笔记本电脑
- java - 如何使多边形附加到 3 点钟位置的点
- r - 将第一个非缺失值存储在新列中
- node.js - NodeJS+Express循环调用异步方法
- python - PySFTP 和 get_r 使用 Python - “没有这样的文件或目录”