在视图中,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
答案 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);
我希望它有所帮助。