我是MVC3的新手,但是我正在编写MVC3应用程序需要在jQuery对话框中加载DateTime列表,但是当我回到服务器时,DateTime的列表未发送。
我很累,为列表中的每个日期添加一个隐藏的元素
@for (int i = 0; i < Model.ListOfDates.Count; i++)
{
@Html.HiddenFor(x => x.ListOfDates[i])
}
,但是当尝试更改jQuery datepicker中的日期时,我会遇到以下错误:
Microsoft JScript运行时错误:无法设置属性的值 "当前日":对象为空或未定义
有人可以告诉我我做错了什么吗?我创建了一个测试应用程序来演示:
模型
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Stupid_Dates_Test.Models
{
public class Model
{
public string StringProperty { get; set; }
public int IntProperty { get; set; }
public List<DateTime> ListOfDates { get; set; }
}
}
控制器
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Stupid_Dates_Test.Models;
namespace Stupid_Dates_Test.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
Model m = new Model();
m.StringProperty = "This is a string property";
m.IntProperty = 100;
m.ListOfDates = new List<DateTime>();
m.ListOfDates.Add(new DateTime(2012, 11, 1));
m.ListOfDates.Add(new DateTime(2012, 11, 2));
m.ListOfDates.Add(new DateTime(2012, 11, 3));
m.ListOfDates.Add(new DateTime(2012, 11, 4));
m.ListOfDates.Add(new DateTime(2012, 11, 5));
return View(m);
}
public void Save(Model m)
{
// Save Code
}
}
}
查看
<script src="../../Scripts/jquery-1.5.1.min.js" type="text/javascript"></script>
<script src="../../Scripts/jquery-ui-1.8.11.min.js" type="text/javascript"></script>
<link href="../../Content/themes/base/jquery.ui.all.css" rel="stylesheet" type="text/css" />
@model Stupid_Dates_Test.Models.Model
<form id="frmMain" action="">
@Html.EditorFor(x => x.StringProperty)
@Html.EditorFor(x => x.IntProperty)
@*@for (int i = 0; i < Model.ListOfDates.Count; i++)
{
@Html.HiddenFor(x => x.ListOfDates[i])
}*@
<a href="javascript:ShowDates()">Edit List of Dates</a>
<div id="dlgDates" style="display: none;">
@for (int i = 0; i < Model.ListOfDates.Count; i++)
{
@Html.EditorFor(x => x.ListOfDates[i])
}
</div>
</form>
<script type="text/javascript">
$(document).ready(function () {
var today = new Date();
var dd = today.getDate();
var mm = today.getMonth() + 1;
var yyyy = today.getFullYear();
if (dd < 10) { dd = '0' + dd }
if (mm < 10) { mm = '0' + mm }
today = mm + '/' + dd + '/' + yyyy;
$(":input[data-datepicker]").datepicker({ defaultDate: today });
});
function ShowDates() {
$("#dlgDates").dialog({
autoOpen: true,
closeOnEscape: false,
width: 500,
height: 400,
resizable: false,
title: "Dates",
modal: true,
draggable: false,
open: function () {
$("#dlgDates").show();
},
buttons: {
"Save": function () {
$.ajax({
type: "POST",
url: '/Home/Save/',
data: $("#frmMain").serialize(),
success: function () {
// Save Code
alert('Saved successfully!');
$('#dlgDates').dialog('destroy');
},
error: function () {
alert('Error');
}
});
}
}
});
}
</script>
DateTime编辑器模板
@model System.DateTime
@Html.TextBox("", (Model == null ? "" : Convert.ToDateTime(ViewData.TemplateInfo.FormattedModelValue).ToShortDateString()), new { data_datepicker = true })
有几个问题:1)选择器是错误的。:输入[data-datepicker]选择type =" date-datepicker"的输入作为我的理解。html.textboxfor渲染一个输入,其类型为"文本",尝试在输入字段中添加类,以便您可以使用input.datepck之类的内容来选择它们。
2)当您使用jQuery对话框插件时,日期字段未发送到服务器(它们不显示HTTP请求