我对MVC和DevExpress相对较新。我有一个UI,我需要采取日期字段并将其传递给控制器。非常简单的任务。
我的观点看起来像。
<script type="text/javascript">
var positionDate = "1/1/2014";
function AddClick(s, e) {
debugger;
positionDate = LockedDateToAdd.GetDate().toDateString();
$.ajax({
type: "POST",
url: "/LockedDate/AddLockedDate",
data: { positionDate: positionDate },
success: function (msg) { LockedDateGridView.PerformCallback(); }
});
}
</script>
@{
ViewBag.Title = "Locked Dates";
}
<h4>Locked Dates</h4>
@using (Html.BeginForm())
{
<table>
<tr>
<td>
@Html.DevExpress().DateEdit(settings =>
{
settings.Name = "LockedDateToAdd";
settings.Date = DateTime.Today;
settings.Properties.AllowNull = false;
settings.Properties.DateOnError = DateOnError.Today;
settings.Properties.CalendarProperties.ShowWeekNumbers = false;
}).GetHtml()
</td>
<td>
@Html.DevExpress().Button(settings =>
{
settings.Name = "LockedDateAdd";
settings.Text = "Add";
settings.ClientSideEvents.Click = "AddClick";
settings.UseSubmitBehavior = false;
}).GetHtml()
</td>
</tr>
</table>
}
我希望使用AddClick方法传递Date。
控制器看起来像:
[HttpPost]
public ActionResult AddLockedDate(string positionDate)
{
DateTime dateValue;
if (DateTime.TryParse(positionDate, out dateValue))
{
_dataAccess.AddLockedDate(dateValue);
}
return Content("");
}
问题是,我的代码没有点击AddLockedDate ActionResult。当我删除[HttpPost]时,它确实被击中但是positionDate变为空。
我在这里缺少什么?任何的想法。 谢谢你的帮助。
答案 0 :(得分:1)
您的代码似乎没有问题。只需按照以下更新ajax方法。
<script type="text/javascript">
var positionDate = "1/1/2014";
function AddClick(s, e) {
debugger;
positionDate = LockedDateToAdd.GetDate().toDateString();
$.ajax({
type: "POST",
url: "/LockedDate/AddLockedDate",
data: JSON.stringify({ positionDate: positionDate }),
contentType: 'application/json; charset=utf-8',
success: function (msg) { LockedDateGridView.PerformCallback(); }
});
}
</script>
答案 1 :(得分:1)
当JS的客户端日期的不同表示由DateTime.TryParse
无法直接解析时,会出现问题。
使用console.log(positionDate)
,捕获的日期格式如下(在当前撰写时):
Wed Mar 22 2017
使用TryParse
时日期格式是不可解析的,但没有指定正确的日期格式,因此使用TryParseExact
正确格式化:
<强>控制器强>
[HttpPost]
public ActionResult AddLockedDate(string positionDate)
{
DateTime dateValue;
// parse exactly as toDateString method returns
if (DateTime.TryParseExact(positionDate, "ddd MMM d yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dateValue))
{
_dataAccess.AddLockedDate(dateValue);
}
return Content("");
}
查看强>
<script type="text/javascript">
var positionDate = "1/1/2014";
function AddClick(s, e) {
debugger;
positionDate = LockedDateToAdd.GetDate().toDateString();
$.ajax({
type: "POST",
url: "@Url.Action("AddLockedDate", "LockedDate")",
data: JSON.stringify({ positionDate: positionDate }),
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (msg) { LockedDateGridView.PerformCallback(); }
});
}
</script>
相关:
Javascript date to C# via Ajax
DateTime.TryParse(MSDN)
DateTime.TryParseExact(MSDN)