2016-03-28 25 views
0

Mvc'de biraz yeni ve neyi özlediğimi anlamadım. Giriş'i başlattığımda, foreach görünümünde (Modelde var öğesi) < - Model null alır ve System.NullReferenceException ile durur. Bir neden gerçekten bir ipucu yoktur ve umarım birileri aşağıdaki kodda neyin yanlış olduğuna dair bir tavsiyede bulunabilir ya da hatayı aramaya başlayabilirler.System.NullReferenceException görüntüde yineleme yapmaya çalışırken

modeli:

public class LoginModels 
    { 
     public string UserLogin { get; set; } 
     public string Address { get; set; } 
     public string Password { get; set; } 
     public List<string> emailSubject { get; set; } 
    } 

kontrolör:

public ActionResult Login(string address, string password, LoginModels model) 
    { 
     using (Imap imap = new Imap()) 
     { 
      try 
      { 
       imap.ConnectSSL("imap.gmail.com"); 
       imap.Login(address, password); 
       imap.SelectInbox(); 
       List<long> uids = imap.Search(Flag.All); 

       model.emailSubject = new List<string>();     
       foreach (long uid in uids) 
       { 
        var eml = imap.GetMessageByUID(uid); 
        IMail email = new MailBuilder().CreateFromEml(eml); 

        model.emailSubject.Add(email.Subject); 
       } 

       Session["user"] = new LoginModels() { UserLogin = address, Address = address }; 
       return RedirectToAction("Index", "Home", model.emailSubject); 
      } 
      catch (Exception e) 
      { 
       ViewBag.exceptionMessage = e; 
       return View("LoginFailed"); 
      } 
     } 

görünüm:

@using TheOnlineArchivator.Models; 
    @model List<TheOnlineArchivator.Models.LoginModels> 
    @{ 
     ViewBag.Title = "Home"; 
    } 
    @{ 
     var user = Session["user"] as LoginModels; 
     if (user != null) 
     { 
      <h2>You are logged on as @user.Address</h2> 
      <table> 
      @foreach (var item in Model) 
      { 
       foreach (var elem in item.emailSubject) 
       { 
        <tr> 
        <td>@elem</td> 
        </tr> 
       } 
      } 
      </table> 
     } 
    } 

cevap

0

Size zaman görünümüne List<TheOnlineArchivator.Models.LoginModels> bir örneğini geçmek unuttum benziyor Bu görünümü denetleyici eyleminizin içine koydu. Şimdiye kadar gösterdiğiniz şey Giriş denetleyici işleminizdir, ancak Ana Sayfa/Dizin eyleminizi göstermediniz. Bu eylemin içinde, boş olmayan bir modeli görünümüne geçirdiğinizden emin olmalısınız:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     List<LoginModels> model = ... go get your model from somewhere and make sure it is not null 
     return View(model); 
    } 
} 
İlgili konular