2017-07-12 10 views
0

I私のかみそりビューにスクリプトタグ内に以下のコードを持っている:明確にするため「CS0162:エラーと警告:到達不能コード検出」レイザービューに

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カミソリのページでこのエラーメッセージを参照する別の質問を見つけることができませんでしたので、ここに投稿しています。

私の質問は、そのコード行が到達不能であると考えられる理由です。デバッグしようとしたときに、私のページ上で問題に関連するものが見つかった場合は、この質問を更新します。

+0

をビューロードエラーなしで私がコメントアウト場合はより多くのコードが表示 – rdans

+0

の後半にあるにもかかわらず、その二foreachループをコメントアウトした場合最初のforeachループでは、エラーは同じ場所にスローされます – rdans

答えて

0

エラーは表示されなくなりました。私はモデルのプロパティの名前を変更して、ページを再度ロードしようとする前に再コンパイルしませんでした。再コンパイルすると、エラーがなくなりました。どのように根本原因が表示されたエラーメッセージに変換されたのかは分かりません。

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); 
関連する問題