0

私は次のかみそりでビューを持っています...

foreach (var result in @Model.Results)
{
    if (result.Location != null && result.Location.Lat != null && result.Location.Long != null)
    {                   
        <script type="text/javascript" language="javascript">

            var MapDataObj = (function () {
                mapDataObj = new Object();
                mapDataObj.Lat = @result.Location.Lat;
                mapDataObj.Long = @result.Location.Long;
                mapDataObj.BasedInArea = 'True';
                SearchMapDataProperties.searchResultsArray.push(mapDataObj);
                return {

                };
            }());
        </script>
    }

しかし、私がそれを変更すると...

foreach (var result in @Model.Results)
{
    if (result.Location != null && result.Location.Lat != null && result.Location.Long != null)
    {                   
        <script type="text/javascript" language="javascript">

            var MapDataObj = (function () {
                mapDataObj = new Object();
                mapDataObj.Lat = result.Location.Lat;
                mapDataObj.Long = result.Location.Long;
                mapDataObj.BasedInArea = 'True';
                SearchMapDataProperties.searchResultsArray.push(mapDataObj);
                return {

                };
            }());
        </script>
    }

(result.Location オブジェクトから「@」記号を削除しました) result.Location で null 参照例外が発生します。

違いが本当に気になります。YSODを取得したため、明らかにまだC#として扱っています。その違いが何なのか、私にはさっぱり理解できません...

ピート

4

2 に答える 2

2

@resultビューモデルを参照しています(列挙型内のオブジェクトがModel.Resultsを介して反復されますforeach)。を削除する@と、JavaScript オブジェクトresult(おそらく未定義) を参照しようとしています。

このようなコントロールが必要な場合。Newtonsoft の JSON ライブラリを使用して、モデルをresult(次のようなものに) シリアル化できます:)

var result = @Html.Raw(Json.Encode(Model.Results));

Json.Encode(ヘルパーがあると仮定して) Model.ResultsHTML でシリアル化された後、次のようになります。

var result = [
  {"Location":{"Lat":"0.00","Long":"0.00"}},
  {"Location":{"Lat":"0.00","Long":"0.00"}}
];

もちろん、次の単一のインスタンスです。

var result = @Html.Raw(Json.Encode(result));
// result = {"Location":{"Lat":"0.00","Long":"0.00"}}

resultかみそりなしで参照するときに機能するようになりました。

于 2013-05-28T12:23:52.853 に答える
0

Razor では、@プレフィックスを使用すると (おそらく空の文字列を返すことによって) null インスタンスを処理するように見えますが、「適切な C#」ではこの安全メカニズムが得られないため、Locationnull でないことを確認する必要があります。

于 2013-05-28T12:24:28.263 に答える