如果有人能就我的问题提出建议,我会非常感激。 我有一个包含集合的模型:
public class Customer
{
public Customer()
{
this.CustomerAddresses = new HashSet<CustomerAddress>();
}
//..properties
public virtual ICollection<CustomerAddress> CustomerAddresses {get; set;}
}
在我的&#39;创建&#39; view我有一个带有incell编辑的网格,允许我存储CustomerAddress
的集合,然后与Customer
模型一起传递给控制器:
@model Customer
//Customer inputs...
@( Html.Kendo().Grid(Model.CustomerAddresses)
.Name("CustomerAddresses")
.ToolBar(toolbar => { toolbar.Create(); })
.Columns(columns =>
{
columns.Bound(p => p.AddressID).Hidden();
columns.Bound(p => p.Type) //Foreign key of type string
.EditorTemplateName("DropDownTemplate")
.EditorViewData(new { ddname = "Type" })
.ClientTemplate("#= Type #" +
"<input type='hidden' name='CustomerAddresses[#= index(data)#].Type' value='#= Type #' />");
columns.Bound(p => p.Region) //Foreign key of type int?
.EditorTemplateName("DropDownTemplate")
.EditorViewData(new { ddname = "Region" })
.ClientTemplate("#= Region #" +
"<input type='hidden' name='CustomerAddresses[#= index(data)#].Region' value='#= Region #' />");
})
.Editable(editable => editable.Mode(GridEditMode.InCell))
.DataSource(dataSource =>
dataSource.Ajax()
.Model(model =>
{
model.Id(u => u.AddressID);
})
))
DropDownTemplate:
@if (ViewData["ddname"] == "Region")
{
@Html.Kendo().ComboBox().Name(ViewData["ddname"].ToString())
.BindTo(SelectListProvider.GetCatalog<Region>())
}
else
{
@Html.Kendo().ComboBox().Name(ViewData["ddname"].ToString())
.BindTo(SelectListProvider.GetCatalog<AddressType>())
}
问题是,当我从Region
整数列的下拉列表中选择一些项目并按下单元格外部时,它不会将所选值分配给网格列。我看到一个空单元格。
但是,当我在Type
单元格中选择字符串并按下外部时,我会看到所选的值。
我做错了什么? int列的问题是什么?
非常感谢
答案 0 :(得分:1)
好的,我终于明白了。我使用外键而不是模板,以及相同列的隐藏字段:
columns.ForeignKey(p => p.Type, someselectlist, "Value", "Text");
columns.ForeignKey(p => p.Region, anotherselectlist, "Value", "Text");
columns.Bound(p => p.Type).ClientTemplate("#= Type #" +
"<input type='hidden' name='Addresses[#= index(data)#].Type' value='#= Type #' />").Hidden();
columns.Bound(p => p.Region).ClientTemplate("#= Region #" +
"<input type='hidden' name='Addresses[#= index(data)#].Region' value='#= Region #' />").Hidden();
GridForeignKey.cshtml
Html.Kendo().DropDownListFor(m => m)
.BindTo((SelectList)ViewData[ViewData.TemplateInfo.GetFullHtmlFieldName("") + "_Data"])
.HtmlAttributes(new { data_value_primitive = true })
现在,它按照我想要的方式工作,并且所有值都与控制器相加。