具有下拉列的Kendo网格不分配整数值

时间:2015-02-27 04:45:39

标签: jquery asp.net-mvc kendo-ui kendo-grid kendo-asp.net-mvc

如果有人能就我的问题提出建议,我会非常感激。 我有一个包含集合的模型:

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列的问题是什么?

非常感谢

1 个答案:

答案 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 })

现在,它按照我想要的方式工作,并且所有值都与控制器相加。