Razor View上的“CS0162:警告为错误:检测到无法访问的代码”

时间:2017-07-12 15:51:21

标签: asp.net-mvc razor

我的剃刀视图中的脚本标记中包含以下代码:

self.regions = [];

@foreach(var region in Model.OperationRegions)
{
<text>
self.regions.push({
    regionid: '@region.Region_Id',
    regionname: '@region.Title',
    selected: ko.observable(@(Model.RegionsList.Contains(region.Region_Id).ToString().ToLower()))
});
</text>
}

self.categories = [];

@foreach(var category in Model.Categories)
{
<text>
self.categories.push({
    categoryid: '@category.Category_Id',
    title: '@category.Title'
});
</text>
}

为清楚起见,foreach循环之外和文本标记内的代码是Javascript,剃刀代码的目的是用来自服务器的数据填充我的Javascript数组。

当我运行这个时,我当前收到服务器错误“CS0162:警告为错误:检测到无法访问的代码”

在代码段中的第二个“foreach”上抛出了错误。

令人惊讶的是我在MVC剃刀页面上找不到另一个引用此错误消息的问题,所以我在这里发帖。

我的问题是为什么这行代码被认为无法访问?当我尝试调试时,如果我在页面上发现其他任何与该问题相关的内容,我将更新此问题。

2 个答案:

答案 0 :(得分:0)

错误现在消失了。我重新命名了我的模型的属性,并且在尝试再次加载页面之前没有重新编译。重新编译使错误消失。我不知道根本原因如何转换为显示的错误消息,但现在无论如何都已修复。

答案 1 :(得分:0)

这是一种处理这种情况的极差方法。没有必要像这样一块一块地建造一个阵列。只需将您的列表转换为JSON。

self.regions = @Html.Raw(Json.Encode(Model.OperationRegions.Select(region => new {
    regionid = region.Region_Id,
    regionname = region.Title,
    selected = Model.RegionsList.Contains(region.Region_Id)
})));

唯一无法处理的事情是使selected成为可观察者。但是,您可以简单地遍历数组并修复此问题:

for (var i = 0; i < self.regions.length; i++) {
    self.regions[i].selected = ko.observable(self.regions[i].selected);
}

但是,更好的方法是使用另一种视图模型:

var OperationRegionViewModel = function (data) {
    var self = {};

    self.regionid = ko.observable(data.regionid);
    self.regionname = ko.observable(data.regionname);
    self.selected = ko.observable(data.selected);

    return self;
};

然后,您可以执行以下操作:

var regions = @Html.Raw(Json.Encode(Model.OperationRegions.Select(region => new {
    regionid = region.Region_Id,
    regionname = region.Title,
    selected = Model.RegionsList.Contains(region.Region_Id)
})));
self.regions = $.map(regions, new OperationRegionViewModel);

或者,甚至可以更好地一次构建您的JSON:

var json = @Html.Raw(Json.Encode(new {
    regions = Model.OperationRegions.Select(r => new { ... }),
    categories = Model.Categories.Select(c => new { ... }),
    // etc
});

然后,将此全部注入您的视图模型中:

var viewModel = (function (json) {
    // other stuff    
    self.regions = $.map(json.regions, new OperationRegionViewModel);
    self.categories = $.map(json.categories, new CategoryViewModel);
    // etc
})(json);