使用AJAX结果更新DisplayFor日期

时间:2016-06-16 16:28:26

标签: javascript jquery ajax datetime asp.net-mvc-5

在视图中,DisplayFor与模型中的DateTime字段相关联。要更新该字段,AJAX调用将返回Date。我可以将AJAX日期转换为MM / DD / YYYY值,但使用.val设置DisplayFor不会更新视图。 Chrome开发者工具没有显示错误,实际上显示了正确的转换日期时间,但DisplayFor没有更新。我没有尝试更改.attr而不是.val,因为看起来.val是正确的选项。任何人都可以看到为什么视图没有更新?提前谢谢!

模型声明:

DateTime? SaleDate { get; set; }

在视图中显示:

@Html.LabelFor(m => m.SaleDate, "Sale Date")
@Html.DisplayFor(m => m.SaleDate, "{0:d}", new { @class = "form-control" })

在成功的AJAX调用中更新脚本:

success: function (data) {
    var $sDate = $("#SaleDate");
    var pattern = /Date\(([^)]+)\)/;
    var results = pattern.exec(data[0].SaleDate);
    var dt = new Date(parseFloat(results[1]));
    $sDate.val(dt); //dt is correct Date, but DisplayFor isn't updating!
}

修改

页面源指示id正确,但没有输入。我认为这是因为DisplayFor与TextBoxFor,但是明显缺少id是不是问题?

<label for="SaleDate">Sale Date</label>
6/1/2016 12:00:00 AM//no input section, just the DateTime value

或者,如果SaleDate为空:

<label for="SaleDate">Sale Date</label>
//no value or input section

1 个答案:

答案 0 :(得分:1)

View中的Razor代码会生成一些HTML代码。 Javascript在客户端工作,不知道Razor的@Html.DisplayFor,只关注它的输出。我在剃刀方面不强,所以我的报价可能包含错误 1. @Html.TextBoxFor(m => m.SaleDate, "{0:d}", new { @class = "form-control", id = "SaleDate" })
JS保持不变。 Con:这是可编辑的文本框(输入)
2. <span id="SaleDate" class="form-control">@Html.DisplayFor(m => m.SaleDate, "{0:d}")</span>
JS最后一行应该是$sDate.html(dt);

我希望它有所帮助。