Asp.net mvc 剑道mvc编辑器未绑定到选定的下拉属性
使用来自剑道网格(v 2017.3.913)的内联编辑,下拉列表中使用的编辑器模板未使用属性id设置列表中的选定值(或这是另一个问题,但相关) 我尝试了一些类似问题的解决方案,但都没有达到预期的效果 剑道格网 编辑器模板 最后,dropdownlist使用的数据:Asp.net mvc 剑道mvc编辑器未绑定到选定的下拉属性,asp.net-mvc,kendo-grid,Asp.net Mvc,Kendo Grid,使用来自剑道网格(v 2017.3.913)的内联编辑,下拉列表中使用的编辑器模板未使用属性id设置列表中的选定值(或这是另一个问题,但相关) 我尝试了一些类似问题的解决方案,但都没有达到预期的效果 剑道格网 编辑器模板 最后,dropdownlist使用的数据: var orgSelectList = organizations.Select(n => new SelectListItem { Text = n.Name,
var orgSelectList = organizations.Select(n => new SelectListItem
{
Text = n.Name,
Value = n.Id.ToString()
}).ToList();
ViewData["OrganizationSelectList"] = new SelectList(orgSelectList, "Value", "Text");
注
我还尝试使用“Id”和“Name”创建一个SelectList(将更改传播到编辑器,并替换“Value”和“Text”),这样它就可以与ParentOrganization
对象对齐,但最终生成了“未定义”的列表项
orgSelectItems.AddRange(organizations.Select( n => new BaseSelectItem
{
Id = n.Id,
Name = n.Name
}));
ViewData["OrganizationSelectList"] = new SelectList(orgSelectList, "Id", "Name");
这就是我在剑道下拉列表中输入和输出数据的方式
@(Html.Kendo().DropDownList()
.Name("showProcessed")
.DataTextField("OptionText")
.DataValueField("ViewOption")
.AutoBind(true)
.SelectedIndex(2)
.Events(e => e.Change("fe_DiaryItem.processedChange"))
.HtmlAttributes(new { style = "width: 250px;" })
.DataSource(ds =>
{
ds.Read("DiaryGridViewOptions", "ControllerName");
})
)
在本例中,我使用数据源填充对象,并使用.SelectedIndex(x)选择索引
如果需要,我还有其他一些例子来说明如何设置索引,但这是一个实用的生产代码
----编辑----
似乎[剑道或MVC助手本身]不喜欢您使用“适当的”[域]对象-似乎混淆了绑定。我认为根本原因是属性名称相同(Id和名称),需要不同。我使用域对象
组织
作为属性的类型。我创建了另一个viewmodel来表示组织,并使用了不同的属性名称:
表示组织的新viewmodel
我没有使用“Id”和“Name”作为映射文本和值属性,而是使用以下“ParentOrganization-x”属性:
public class ParentOrganizationViewModel
{
public int? ParentOrganizationId { get; set; }
public string ParentOrganizationName { get; set; }
}
因此,网格视图模型的更新将反映新的组织视图模型:
public class OrganizationGridViewModel
{
...
[UIHint("ParentOrganization")]
public ParentOrganizationViewModel ParentOrganization { get; set; }
}
@(Html.Kendo().DropDownList()
.Name("ParentOrganization")
.DataTextField("ParentOrganizationName")
.DataValueField("ParentOrganizationId")
.AutoBind(true)
.ValuePrimitive(true)
.BindTo((IEnumerable) ViewData["OrganizationSelectList"])
)
此外,它不是将SelectList
作为数据源返回下拉列表,而是直接的viewlmodel列表:
var orgSelectList = organizations.Select(n => new ParentOrganizationViewModel()
{
ParentOrganizationName = n.Name,
ParentOrganizationId = n.Id
}).ToList();
ViewData["OrganizationSelectList"] = orgSelectList;
最后的更改在编辑器模板中,以更改DataTextField
和DataValueField
属性与组织视图模型匹配:
public class OrganizationGridViewModel
{
...
[UIHint("ParentOrganization")]
public ParentOrganizationViewModel ParentOrganization { get; set; }
}
@(Html.Kendo().DropDownList()
.Name("ParentOrganization")
.DataTextField("ParentOrganizationName")
.DataValueField("ParentOrganizationId")
.AutoBind(true)
.ValuePrimitive(true)
.BindTo((IEnumerable) ViewData["OrganizationSelectList"])
)
@Simon_Price您是如何获得SelectedIndex值的?这将是一个动态值,因为每行都有自己的选择previously@WillLopez看看编辑,它会显示第二个下拉列表,以及我如何获得索引值
var orgSelectList = organizations.Select(n => new ParentOrganizationViewModel()
{
ParentOrganizationName = n.Name,
ParentOrganizationId = n.Id
}).ToList();
ViewData["OrganizationSelectList"] = orgSelectList;
@(Html.Kendo().DropDownList()
.Name("ParentOrganization")
.DataTextField("ParentOrganizationName")
.DataValueField("ParentOrganizationId")
.AutoBind(true)
.ValuePrimitive(true)
.BindTo((IEnumerable) ViewData["OrganizationSelectList"])
)