2014-06-10 131 views
1

我有以下視圖。Kendo UI MVC網格日期編輯器模板不顯示網格值

@using BecomingAKendoUISamurai.ViewModels 

<h2>Step 21 MVC Grid CRUD</h2> 

<br/> 

@(Html.Kendo().Grid<SamuraiViewModel>() 
    .Name("SamuraiGrid") 
    .Columns(columns => 
    { 
     columns.Bound(m => m.Id).Hidden(); 
     columns.Bound(m => m.FirstName); 
     columns.Bound(m => m.LastName); 
     columns.Bound(m => m.RankId).ClientTemplate("#=Rank#"); 
     columns.Bound(m => m.DateOfBirth).Width(125); 
     columns.Bound(m => m.DateOfDeath).Width(125); 
     columns.Command(command => { command.Edit(); command.Destroy(); }).Width(200); 
    }) 
    .DataSource(source => source 
    .Ajax() 
    .Sort(s => s.Add(p => p.LastName).Ascending()) 
    .PageSize(5) 
    .Model(model => 
    { 
     model.Id(m => m.Id); 
    }) 
    .Create(create => create.Action(MVC.Home.ActionNames.CreateSamuraiMvc, MVC.Home.Name)) 
    .Read(read => read.Action(MVC.Home.ActionNames.ReadSamuraiMvc, MVC.Home.Name)) 
    .Update(update => update.Action(MVC.Home.ActionNames.UpdateSamuraiMvc, MVC.Home.Name)) 
    .Destroy(destroy => destroy.Action(MVC.Home.ActionNames.DestroySamuraiMvc, MVC.Home.Name)) 

) 
.Editable(editable => editable.Mode(GridEditMode.InLine)) //PopUp and InCell 
.Sortable() 
.Pageable(p => p.PageSizes(new int[]{2,4,6})) 
.Filterable() 
.ToolBar(toolbar => toolbar.Create()) 
) 

使用下面的視圖模型

namespace BecomingAKendoUISamurai.ViewModels 
{ 
    public class SamuraiViewModel : IMappableViewModel<SamuraiViewModel, Samurai> 
    { 
    #region Properties 
    public int Id { get; set; } 
    [Required] 
    [DisplayName("First Name")] 
    public string FirstName { get; set; } 

    [Required] 
    [DisplayName("Last Name")] 
    public string LastName { get; set; } 

    [Required] 
    [DisplayName("Rank")] 
    [UIHint("Rank")] 
    public int RankId { get; set; } 
    public string Rank { get; set; } 
    public List<SelectListItem> Ranks { get; set; } 

    [DisplayName("Date of Birth")] 
    [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")] 
    [UIHint("DateOfBirthDate")] 
    public DateTime DateOfBirth { get; set; } 

    [DisplayName("Date of Death")] 
    [DisplayFormat(DataFormatString = "{0:MMMM dd yyyy}")] 
    [UIHint("DateOfDeathDate")] 
    public DateTime DateOfDeath { get; set; } 
    #endregion 

    #region Constructors 
    public SamuraiViewModel() 
    { 
     Ranks = new List<SelectListItem>(); 
    } 

    public SamuraiViewModel(Samurai samurai) 
    { 
     FromEntity(samurai); 
    } 
    #endregion 

    #region IMappableViewModel 

    public void FromEntity(Samurai entity) 
    { 
     Mapper.CreateMap<Samurai, SamuraiViewModel>() 
      .ForMember(vm => vm.RankId, m => m.MapFrom(e => e.Rank)) 
      .ForMember(vm => vm.Rank, m => m.MapFrom(e => e.Rank.ToString())); 

     Mapper.Map(entity, this); 
    } 

    public Samurai ToEntity() 
    { 
     var entity = new Samurai(); 
     Mapper.CreateMap<SamuraiViewModel, Samurai>() 
      .ForMember(e => e.Rank, src => src.MapFrom(vm => vm.RankId)); 

     Mapper.Map(this, entity); 
     return entity; 
    } 
    #endregion 

    public string JsonRanks 
    { 
     get { return Ranks.ConvertToJson(); } 
    } 
    } 
} 

使用下面編輯模板

@model DateTime? 

@(Html.Kendo().DatePicker() 
      .Name("DateOfBirth") 
      .Format("MM/dd/yyyy") 
      .Value(Model == null ? DateTime.Now : @Model) 
) 

調用控制器的讀法

public virtual JsonResult ReadSamuraiMvc([DataSourceRequest] DataSourceRequest request) 
{ 
    return Json(GetSamuraiViewModels().ToDataSourceResult(request), JsonRequestBehavior.AllowGet); 
} 
private List<SamuraiViewModel> GetSamuraiViewModels() 
{ 
    var viewModel = new List<SamuraiViewModel>(); 

    var samurais = samuraiService.ReadSamurai().ToList(); 
    if (samurais.Any()) 
    { 
    samurais.ForEach(s => viewModel.Add(new SamuraiViewModel(s))); 
    } 
    return viewModel; 
} 

我可以看到所有數據網格。例如,第1行有: 「Hatori」「Hanzo」「Grand Master」「03/15/1541」「1563年4月16日」編輯刪除

當我點擊編輯按鈕時,名,姓和排行全部具有在該行中定義的值,但是出生日期和死亡日期都是空的。

我該如何解決這個問題?

我試過使用內聯和彈出模式並獲得相同的結果。 在此先感謝。

+0

你試過服用UI提示關閉出生財產的日期,並試圖使用與MVC的包裝提供的默認日期時間選擇器。或者嘗試使用kendo()。datepickerfor(model)這將爲你綁定值。此外,爲什麼不檢查model.hasvalue是否使用可空datetime –

+0

當我從模型中刪除UIHint時,我得到默認的dateTime選擇器編輯器,但它也是空的。 – user1489325

回答

2

嘗試使用DatePickerFor:

@model DateTime? 
@(Html.Kendo().DatePickerFor(m => m) 
     .Format("MM/dd/yyyy") 
) 
+0

這是我最初嘗試過的,但它沒有工作。然後,我發現DateOfBirth實際上有數據在其中,我發現它完全奇怪。所以我改變了Hatori Hanzo的DateOfBirth和DateOfDeath(在我上面的例子中,從1563年4月16日的「03/15/1541」到1963年3月15日的「1963年4月16日」),當我刷新網格並按下編輯按鈕的數據在那裏似乎有一個問題,允許在某個日期之前的值在2000年1月1日之前的任何東西都沒有顯示在編輯模式下,怎麼了? – user1489325

+0

我添加了.Min(new DateTime (1000,1,1))到Date.cshtml文件,現在我看到了所有的日期。我開始記住datepickers的默認最小值是1/1/1900,因此它之前沒有顯示日期。 – user1489325