问题描述
我正在调用 ViewBag.DeliveryDatebysupplier
来更新我的文本框或只是为了提醒。该值始终为 null
。但是当我调试并检查控制器中的 ViewBag
时,它具有日期值。
控制器
if (ds.Tables[0].Rows.Count == 1)
{
string dt = ds.Tables[0].Rows[0]["DeliveryDt"].ToString();
DateTime myDate = Convert.ToDateTime(dt);
dt = myDate.ToString("yyyy-MM-dd");
ViewBag.DeliveryDatebysupplier = dt.ToString();
//Session["NewDeliveryDate"] = dt.ToString();
}
Jquery
function getDeliveryDateBysupplier() {
var _storeID = $('#ddlStoreID :selected').val();
var _supplierID = $('#ddlsupplier :selected').val();
var url = "@Url.Content("~/Home/DeliveryDatebysupplier")";
$.ajax({
data: {
StoreID: _storeID,supplierID: _supplierID
},type: 'POST',cache: false,dataType: 'json',url: url,success: function (result) {
var newDeliveryDate = '@ViewBag.DeliveryDatebysupplier';
alert(newDeliveryDate);
},error: function (ex) {
alert("Error getDeliveryDateBysupplier()");
}
});
}
解决方法
假设 HomeController 中名为 DeliveryDatebySupplier 的操作是设置 ViewBag.DeliveryDatebySupplier 的方法,那么不幸的是,这将不起作用。 >
脚本会在生成完整页面时生成,当时尚未设置该值。
我建议在您的脚本中调用 DeliveryDatebySupplier 时返回值,而不是使用视图包。
控制器将是这样的
if (ds.Tables[0].Rows.Count == 1)
{
string dt = ds.Tables[0].Rows[0]["DeliveryDt"].ToString();
DateTime myDate = Convert.ToDateTime(dt);
dt = myDate.ToString("yyyy-MM-dd");
return new JsonResult
{
data = new
{
DeliveryDatebySupplier = dt.ToString()
}
};
}
和 jquery 会变成这样
success: function (data) {
if (data) {
var newDeliveryDate = data.DeliveryDatebySupplier
alert(newDeliveryDate);
}
else {
//Error
}
},