0

ユーザーが州情報を入力できるページがあり、他のユーザーのリストが州内に戻ってきます。foreachループを使用しています。

一部の州にはユーザーが 0 人いるため、エラーが発生します: Object reference not set to an instance of an object。どうすればそのエラーを乗り越えることができますか? 私が使用している特定のモデルは、プロファイルと呼ばれます。

モデル:

public class homepage
{
    public List<profile> profile { get; set; }
    public PagedList.IPagedList<Article> article { get; set; }
}

コントローラー:

public ActionResult Index()
{
    HttpCookie mypreference = Request.Cookies["cook"];
    if (mypreference == null)
    {
        ViewData["mypreference"] = "Enter your zipcode above to get more detailed information";
        var tyi = (from s in db.profiles.OrderByDescending(s => s.profileID).Take(5) select s).ToList();
    }
    else
    {
        ViewData["mypreference"] = mypreference["name"];
        string se = (string)ViewData["mypreference"];
        var tyi = (from s in db.profiles.OrderByDescending(s => s.profileID).Take(5) where se==s.state select s).ToList();
    } 
    return View();
}

景色:

@if (Model.profile != null)
{
 foreach (var item in Model.profile)
 {
  @item.city  
 }
}

Object reference not set to an instance of an objectエラーを取得すると、行@if (Model.profile != null)が強調表示されるので、これを実行しようとしました:

public List<profile>? profile { get; set; }

しかし、うまくいきませんでした。foreach で空のモデルを受け入れる方法、または実行時にコードをスキップする方法についてのアイデアはありますか?

4

2 に答える 2

1

気づいたのですが、モデルを呼び出していますがView()、モデルを渡していません。次に、参照しているビューでModel.profile. 必然的に null になるため、アクセスするプロパティModelがありません。呼び出しprofileでモデルをビューに渡していることを確認してください。return View(model)


コレクションのフォローアップ

を実装する変数があるときはいつでもIEnumerable<T>、値の上に空のセットを設定するのが最善であることがわかりましたnull。つまり、次のようになります。

// no-nos (IMHO)
IEnumerable<String> names = null; // this will break most kinds of
                                  // access reliant on names being populated
                                  // e.g. LINQ extensions

// better options:
IEnumerable<String> names = new String[0];
IEnumerable<String> names = Enumerable.Empty<String>();
IEnumerable<String> names = new List<String>();

if (variable != null && variables.Count() > 0)アクセスするたびにチェックしたくない場合は、空のコレクションにしてそのままにしておきます。

完全な円になるには、変数に何らかのコレクション (空またはデータが設定されている) が設定されている限り、foreach壊れてはなりません。コード ブロックをスキップするだけで、何も出力しません。オブジェクトの null エラーが発生した場合は、変数が空で列挙子を取得できなかった可能性があります。

于 2013-04-09T15:51:01.033 に答える