2017-04-30 1 views
1

Tout d'abord, j'utilise ASP.net MVC 5 Framework. J'ai essayé d'accéder à la classe Modèle d'enchères et de récupérer mon nom d'utilisateur dans la base de données. Mais ce n'est pas le travail.Lors de la récupération des données de la base de données, j'ai une valeur nulle, Comment résoudre ce problème?

Voici mon Auction Controller - (je commentais la région qui ont besoin de changer)

  var result = auction.Bids.Where(c => c.AuctionId.ToString() == bid.AuctionId.ToString()&&c.Amount> bid.Amount); 
      //I want to get my username in bids model, but it is not retrieving........................................ 
      if (result.Equals(null)) 
       { 

        TempData["Hello"] = "Sorry the bid has been expired!"; 
         return RedirectToAction("Auction", new { id = bid.AuctionId }); 
       } 
       else 
       { 
        TempData["Hello"] = "Bid has a won person"; 

        return RedirectToAction("Auction", new { id = bid.AuctionId }); 
       } 
       //TempData["Hello"] = "This bid has expired!"; 


     } 
     else 
     { 
      var result = db.Bids.Where(c => c.AuctionId.Equals(bid.AuctionId)); 
      if (result.Equals(" ")) 
      { 
       TempData["Hello"] = "Sorry the bid has been expired!"; 
       return RedirectToAction("Auction", new { id = bid.AuctionId }); 
      } 
      else 
      { 
       TempData["Hello"] = "Bid has a won person"; 
       return RedirectToAction("Auction", new { id = bid.AuctionId }); 
      } 
      //TempData["Hello"] = "This bid has expired!"; 

     } 

Voici mon modèle d'enchères

using System; 
    using System.Collections.Generic; 
    using System.Collections.ObjectModel; 
    using System.ComponentModel.DataAnnotations; 
    using System.ComponentModel.DataAnnotations.Schema; 
    using System.Linq; 
    using System.Text; 
    using System.Threading.Tasks; 

    namespace Samurai.Models 
    { 
     public class Auction 
     { 
      [Key] 
      [Required] 
      public long Id { get; set; } 


      public virtual Collection<Bid> Bids { get; private set; } 

      public int BidCount 
      { 
       get { return Bids.Count; } 
      } 
      public Auction() 
      { 
       Bids = new Collection<Bid>(); 
       CurrentPrice = 0; 

      } 
     } 
    } 

ici est mon modèle de soumission

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace Samurai.Models 
{ 
    public class Bid 
    { 
     [Key] 
     [Required] 
     public long Id { get; internal set; } 

     [Required] 
     public long AuctionId { get; set; } 

     [Required] 
     public string Username { get; set; } 

     [Required] 
     [Range(1, double.MaxValue)] 
     public decimal Amount { get; set; } 

     public Bid() 
     { 
      Timestamp = DateTime.Now; 
     } 
    } 
} 

S'il vous plaît aidez-moi à résoudre ce .. Je suis tellement essayé, mais je ne peux pas compris ce out..this est 4ème jour que je suis en train .. s'il vous plaît aidez-moi ...

C'est l'endroit dans la section des offres ActionResult apparaît valeur nulle

var result = auction.Bids.Where(c => c.AuctionId.ToString() == bid.AuctionId.ToString()&&c.Amount> bid.Amount); 

c'est nécessaire de changer, mais je ne sais pas comment changer cela, j'ai essayé différentes ways..but il ne fonctionne pas. ..

Ce que j'essaie de faire est:

(Simplement j'essaie de faire ici, dans le modèle d'offre - J'ai été défini une section de nom d'utilisateur. Donc, je veux récupérer la valeur qui est la référence à l'ID d'offre)

Mais j'ai essayé plusieurs fois d'obtenir le nom d'utilisateur dans le modèle d'offre, mais « résultat » variables toujours nulle ...

j'essayé de passer l'ID d'enchères et récupérer la liste, mais il est le même ... :(

Je joins quelques photos que je l'espère pour vous donner quelques informations .. S'il vous plaît aidez-moi

Vérification des détails Inting à l'objet - "i.stack.imgur.com/Ecd25.png"

Auction database

Bid Database

Merci ....

+0

avez-vous vérifié que le AuctionId est passé dans le modèle? 1- pourquoi ne pas utiliser Html.HiddenFor (mettre en vue partielle si le modèle de la vue est différent pour éviter les fautes de frappe, plus son mieux organisé) @ Html.Hidden ("auctionId", auction.Id) 2- vérifier les valeurs de la où les conditions sont-elles correctes? –

+0

@SaadAlothman - oui ils sont corrects –

+0

AuctionId fonctionne également, parfaitement, seulement problème var section de résultat dans le contrôleur –

Répondre

0

dans cette ligne que vous étiez l'utilisation auction.Bids comme collections EntityFramework. Mais je vois que vous n'avez pas conçu vos modèles avec 1 à plusieurs relations. pour cette raison vos offres doivent être nulles lorsque vous essayez d'appeler.

Mon conseil 1: vous devez cahnge votre modèle pour 1 à plusieurs relations pour la collecte automatique des collections paresseux avec EntityFramework.

2: ou vous devez mettre à jour votre code comme ceci:

db.Bids.Where(c => c.AuctionId == bid.AuctionId && c.Amount> bid.Amount); 

donc, requête directement à partir de db contexte. pas sur la collection des enchères. Parce qu'il sera nul dans cette conception. (jusqu'à ce que vous chargiez)

+0

J'ai essayé, mais le même problème :( –

+0

J'ai mis à jour quelques photos ci-joint, jetez un oeil :) Merci pour les suggestions, j'ai apprécié :) –

+0

ok. nouvelle amélioration. – wikiCan

0

Ma recommandation est de debug la méthode et voir si le problème est lié aux données. De cette façon, vous pouvez savoir si la recherche échoue en raison de la quantité et/ou de la conversion de chaîne.

Alors d'abord essayez d'utiliser le changement de la ligne à celui-ci:

var result = auction.Bids.Where(c => c.AuctionId == bid.AuctionId); 

Si ça marche puis ajouter le filtre Montant:

var result = auction.Bids.Where(c => c.AuctionId == bid.AuctionId && c.Amount > bid.Amount); 

Mon instinct me dit qu'il est à cause du Montant, comme la conversion de chaîne bien que inutile devrait encore fonctionner.

EDIT:

Après quelques lecture du problème peut être que votre collection virtuelle n'est pas chargé avec impatience, essayez d'utiliser comprennent, qui force la requête pour rechercher l'entité imbriquée.

Essayez celui-ci:

var auction = db.Auctions.Include(a => a.Bids).SingleOrDefault(a => a.Id == bid.AuctionId); 

Pour plus d'informations sur incluez vous pouvez lire plus msdn

+0

J'ai été jugé dans les deux sens, mais il est dit null (ne peut toujours pas comprendre :( –

+0

J'ai mis à jour quelques photos ci-joint, jetez un oeil :) merci pour les suggestions, j'ai apprécié :) –

+0

@SumedhaWarakagoda Voir le edit et vérifier si c'est le problème. –