我有一個視圖模型,它包含一個類的數組。該模型包含一個名爲「isJobber」的布爾值。該模型中的數組根據「isJobber」值(加上一些更多的布爾值)設置一些更多的布爾值,以確定用戶是否可以編輯某些特定字段。模型屬性值不一致
我看到與可編輯/不可編輯字段有些不一致,所以我在模型中的數組中添加了一個「debug」屬性。
調試酒店有:
debug = isJobber.ToString();
而且我的模型有屬性 「isJobber」。模型返回true,而debug屬性返回false。
我正在使用Knockout,以便能夠在鉻調試工具中查看所有這些值。
這怎麼可能。 isJobber的值從它用於填充數組的時間到它在父模型中填充的時間都不會改變。這裏是所有的代碼,在全:
var isJobber = _storeRepo.Query().FirstOrDefault(s => s.OwnerID == ownerId).Jobber;
var goalViewModel = goals.Select(g => new GoalViewModel {
GoalId = g.GoalId,
MonthName = GetMonth(g.Month),
Month = g.Month,
LYMonthSales = g.LYMonthSalesAdjusted,
LYMonthSalesActual = g.LYMonthSalesActual,
CYMonthGoal = g.CYMonthGoal,
CYMonth = g.CYMonthAdjusted,
CYMonthActual = g.CYMonthActual,
ExpoDollars = g.ExpoDollars,
LYSalesEditable = isJobber && (currentDate.Year < 2014 || (activeMonth == null && currentDate.Month <= g.Month) || activeMonth <= g.Month),
CYSalesEditable = isJobber && currentDate.Year >= 2014 && activeMonth != null && activeMonth == g.Month,
GoalEditable = (lastProcessedMonth == null || lastProcessedMonth < g.Month),
Debug = "currentDate: " + currentDate.ToShortDateString() + "; isJobber: " + isJobber + "; activeMonth: " + activeMonth + "; Month: " + g.Month + "; lastProcessedMonth: " + lastProcessedMonth
}).ToList();
return View(new EarnbackModel {
EnrollmentId = enrollment.EnrollmentId,
CustomerName = enrollment.Customer.CustomerName,
TotalPackagePrice = packages.Where(p => p.CancellationDate == null).Sum(p => p.Price),
EarnbackCap = enrollment.EarnbackCap ?? 0,
EarnbackCapMax = isJobber ? 1000000m : 5000m,
DefaultGoalPercent = 7,
Ars = arSelections.ToList(),
Goals = goalViewModel,
IsJobber = isJobber,
AvailableStores = stores,
LastProcessedMonth = lastMonth,
});
下面是來自Chrome開發人員工具輸出:
viewModel.IsJobber()
true
viewModel.Goals()[0].Debug()
"currentDate: 12/22/2013; isJobber: False; activeMonth: ; Month: 1; lastProcessedMonth: "
有一件事我通過Chrome瀏覽器開發工具注意到,我們的託管本網站的服務器認爲它是12/22 /2013...don't認爲它對我的房產價值沒有任何影響,但值得注意的是...
迴應PW Cad的評論/問題:下面是淘汰賽的cshtml代碼。這是否回答了關於isJobber可觀察的問題?由於它在視圖模型中,這不會使它成爲可觀察的()嗎?順便說一句,我會開始研究jsFiddle,以爲我以前從來沒有這樣做過。
另外,這在我的開發(localhost)和測試網站中工作得很好。只有生產不工作...
var raw = @Html.Json(Model);
viewModel = ko.mapping.fromJS(raw);
這裏的的jsfiddle,但我不知道如何使它值得沒有一些實際的數據...
這裏是我的模型:
public class EarnbackModel
{
public EarnbackModel()
{
Ars = new List<ArSelectionViewModel>();
Goals = new List<GoalViewModel>();
AvailableStores = new List<StoreViewModel>();
}
public int EnrollmentId { get; set; }
public string CustomerName { get; set; }
public decimal TotalPackagePrice { get; set; }
public decimal EarnbackCap { get; set; }
public decimal EarnbackCapMax { get; set; }
public decimal DefaultGoalPercent { get; set; }
public IList<ArSelectionViewModel> Ars { get; set; }
public IList<GoalViewModel> Goals { get; set; }
public bool IsJobber { get; set; }
public IList<StoreViewModel> AvailableStores { get; set; }
public NewARViewModel NewAr { get; set; }
public int LastProcessedMonth { get; set; }
}
public class GoalViewModel
{
public bool MonthClosed { get; set; }
public int GoalId { get; set; }
public string MonthName { get; set; }
public int Month { get; set; }
public decimal LYMonthSales { get; set; }
public decimal LYMonthSalesActual { get; set; }
public decimal CYMonthGoal { get; set; }
public decimal? CYMonth { get; set; }
public decimal? CYMonthActual { get; set; }
public decimal? ExpoDollars { get; set; }
public bool LYSalesEditable { get; set; }
public bool CYSalesEditable { get; set; }
public bool GoalEditable { get; set; }
public string Debug { get; set; }
}
您的isJobber屬性是否可觀察?看起來你正在互換地使用它。其他的東西沒有任何意義 - 如果你使用一個布爾值,它應該是'false'而不是'False',你可以創建一個jsFiddle來重現你正在使用的錯誤嗎? –
你只是使用Knockout進行調試嗎?如果是這樣,我建議使用Glimpse,因爲Knockout引入了一個全新的圖層,並具有它自己的潛在錯誤。 Glimpse將允許您查看從視圖模型返回的屬性。如果你只是測試模型的初始狀態,這是一條路。如果您在從MVC控制器返回模型的狀態時遇到問題,您是否也可以發佈您的C#模型? –
不,頁面上有很多字段(來自GoalViewModel),用戶可以在其中編輯和查看其他值的變化,這就是爲什麼使用Knockout的原因。 – ganders