Asp.net mvc MVC4剑道网格日期时间模板编辑器
我有这个模型:Asp.net mvc MVC4剑道网格日期时间模板编辑器,asp.net-mvc,grid,kendo-ui,datetimepicker,Asp.net Mvc,Grid,Kendo Ui,Datetimepicker,我有这个模型: public class MainModel { private Guid m_id; public Guid Id { get { return m_id; } set { m_id = value; } } private string m_name; public string Name { get {
public class MainModel
{
private Guid m_id;
public Guid Id
{
get { return m_id; }
set { m_id = value; }
}
private string m_name;
public string Name
{
get { return m_name; }
set { m_name = value; }
}
private ObservableCollection<Foundation> m_foundations;
public ObservableCollection<Foundation> Foundations
{
get
{
if (m_foundations== null)
m_foundations= new ObservableCollection<Foundation>();
return m_foundations;
}
set { m_foundations= value; }
}
}
public class Foundation
{
private ObservableCollection<Worker> m_workers;
public ObservableCollection<Worker> Workers
{
get
{
if (m_workers == null)
{
m_workers = new ObservableCollection<Worker>();
}
return m_workers;
}
set { m_workers = value; }
}
}
public class Worker
{
[HiddenInput(DisplayValue = false)]
public Guid Id
{
get { return m_id; }
set { m_id = value; }
}
[DataType(DataType.DateTime), DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)]
public DateTime BirthDate
{ get; set; }
}
模型的所有属性和日期时间都很好。
问题是:
model.Foundations[0].Workers[].BirthDate具有有效的日期,但在模板编辑器中,使用minvalue model为我提供了日期时间
例如,当我编辑列时,显示的值将类似于01-01-0001,而不是15-03-2006。
好的,我只是更改了日期,但当我单击“更新”时,DateTime的值始终是DateTime.Now。在EditingLine\u Update中,参数“worker”将BrithDate更改为DateTime。现在…我更改的值不存在
我在某个地方读到,这可能是一个文化形成问题,但我完全按照他们说的做了:
创建了一个DateModelBinder并在global.asax中注册了它,但是在调试中,传递的值是DateTime。现在…它已经在那里更改了。
Web.config已被删除
我更改了线程当前区域性和UIculture,更改了kendo.culture,签入调试,一切似乎都正常。
我甚至将javascript验证程序放在编辑器中:
$("#birthDatePicker").kendoValidator({
rules: {
date: function (input) {
var d = kendo.parseDate(input.val(), "dd-MM-yyyy");
return d instanceof Date;
}
}
});
这将返回true,在这里我可以看到我想要更改的日期,但是当转到modelbinder时,它会以某种方式更改为DateTime.now
我很抱歉这么长时间,但这让我发疯了,我不知道这是否是一个有收藏的错误,还是我错过了什么。
Thanx提前我的一个项目中有一个MVC剑道ui网格,它在编辑模式下与日期配合得很好。我注意到与您的代码不同的是,我没有在模型中的DateTime属性上编写任何属性。我的模型就是这样的:
public class TransactionViewModel
{
[Key]
public int TransactionId { get; set; }
public string Description { get; set; }
[Required]
public DateTime TransactionDate { get; set; }
[Required]
public decimal Amount { get; set; }
}
在网格中,我按以下方式绑定柱:
columns.Bound(p => p.TransactionDate).Title("Date").Format("{0:yyyy-MM-dd}").EditorTemplateName("TransactionDate");
而且,尽管我的编辑器模板看起来和你的有点不同,但当我测试用你的模板替换我的模板时,你提供的代码工作得很好
@model DateTime?
@(Html.Kendo().DatePicker()
.Name("TransactionDate")
.Value(Model == null ? DateTime.Now.Date : ((DateTime)@Model).Date)
)
为了处理区域性问题,我还添加了以下代码:
@{
var culture = System.Threading.Thread.CurrentThread.CurrentCulture.ToString();
}
<script src="@Url.Content("~/Scripts/cultures/kendo.culture." + culture + ".min.js")"></script>
<script>
kendo.culture("@culture");
</script>
@{
var culture=System.Threading.Thread.CurrentThread.CurrentCulture.ToString();
}
剑道文化(“文化”);
我建议您尝试以下方法:
- 删除模型中的属性,以验证它们不会导致任何问题。你可以在一切正常后再添加它们
- 尝试指定其他日期格式,或不指定日期格式。如果指定一种格式,而用户的浏览器希望以另一种格式呈现,则可能会遇到麻烦
@model DateTime?
@(Html.Kendo().DatePicker()
.Name("TransactionDate")
.Value(Model == null ? DateTime.Now.Date : ((DateTime)@Model).Date)
)
@{
var culture = System.Threading.Thread.CurrentThread.CurrentCulture.ToString();
}
<script src="@Url.Content("~/Scripts/cultures/kendo.culture." + culture + ".min.js")"></script>
<script>
kendo.culture("@culture");
</script>