2010-07-12 7 views
1

OK Je suis nouveau à .net, je suis juste prendre une photo dans le noir à travers tout cela. J'ai une table Addresses avec un champ StateID et CountryID. Ils se réfèrent à la table des États et des pays. J'utilise LINQ to SQL et Visual Studio 2010.Problèmes de baisse dans .net en utilisant VB et voir le modèle

Dans mon AddressesController je:

Function Create() As ActionResult 
     Dim these_states = GetStates() 
     Dim these_countries = GetCountries() 
     Dim viewModel = New AddressViewModel(these_states, these_countries) 
     Return View(viewModel) 
    End Function 

    ' 
    ' POST: /Addresses/Create 

    <HttpPost()> _ 
    Function Create(ByVal this_address As Address) As ActionResult 
     dataContext.Addresses.InsertOnSubmit(this_address) 
     dataContext.SubmitChanges() 
     Return RedirectToAction("Index") 
    End Function 

J'ai créé un AddressViewModel et il ressemble à ceci:

Public Class AddressViewModel 
Public Address As Address 
Private _these_states As System.Linq.IQueryable(Of State) 
Private _these_countries As System.Linq.IQueryable(Of Country) 

Sub New(ByVal these_states As System.Linq.IQueryable(Of State), ByVal these_countries As System.Linq.IQueryable(Of Country)) 
    _these_states = these_states 
    _these_countries = these_countries 
End Sub 


Dim StateList As New SelectList(_these_states, "StateID", "Label", 1) 
Public Property States As SelectList 
    Get 
     Return StateList 
    End Get 
    Set(ByVal value As SelectList) 

    End Set 
End Property 

Dim CountryList As New SelectList(_these_countries, "CountryID", "Label", 1) 
Public Property Countries As SelectList 
    Get 
     Return CountryList 
    End Get 
    Set(ByVal value As SelectList) 
enter code here 

Puis dans mon code de vue J'ai:

<%@ Page Title="" Language="VB" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage(Of TotallyAwesomeCRM.AddressViewModel)" %> 

un code supprimé comme inutile

  <div class="editor-label"> 
       State 
      </div> 
      <div class="editor-field"> 
       <%: Html.DropDownList("StateID", Model.States, "1")%> 
       <%: Html.ValidationMessageFor(Function(model) model.StateID) %> 
      </div> 

      <div class="editor-label"> 
       Country 
      </div> 
      <div class="editor-field"> 
       <%: Html.DropDownList("CountryID", Model.Countries, "1")%> 
       <%: Html.ValidationMessageFor(Function(model) model.CountryID) %> 
      </div> 

Alors, quand je tente d'aller aux adresses/Créer je reçois cette erreur:

ArgumentNullException was not handled by user code:Value cannot be null. 

Nom du paramètre: articles

Et il pointe cette ligne dans le AddressViewModel:

Dim StateList As New SelectList(_these_states, "StateID", "Label", 1) 

Je sais qu'il tire des résultats, donc j'ai recherché l'élément Parameter et msdn dit que c'est System.Collections.IEnumerable

Alors j'ai changé le AddessViewModel à:

Public Address As Address 
Private _these_states As System.Collections.IEnumerable 
Private _these_countries As System.Collections.IEnumerable 

Sub New(ByVal these_states As System.Collections.IEnumerable, ByVal these_countries As System.Collections.IEnumerable) 
    _these_states = these_states 
    _these_countries = these_countries 
End Sub 

obtenu la même erreur, s'il vous plaît aider

Répondre

1

Le problème est la façon dont vous initialisez StateList et CountryList. Ces valeurs sont en cours d'initialisation avant l'appel de l'instruction New. Par conséquent, StateList et CountryList sont vides car _these_States et _these_countries sont vides.

Changer votre code à ceci:

Sub New(ByVal these_states As System.Linq.IQueryable(Of State), ByVal these_countries As System.Linq.IQueryable(Of Country)) 
    _these_states = these_states 
    _these_countries = these_countries 
End Sub 


Dim StateList As SelectList 
Public Property States As SelectList 
    Get 
     If StateList Is Nothing Then 
      StateList = New SelectList(_these_states, "StateID", "Label", 1) 
     End If 
     Return StateList 
    End Get 
    Set(ByVal value As SelectList) 

    End Set 
End Property 

Dim CountryList As SelectList 
Public Property Countries As SelectList 
    Get 
     If CountryList Is Nothing Then 
      CountryList = New SelectList(_these_countries, "CountryID", "Label", 1) 
     End If 
     Return CountryList 
    End Get 
    Set(ByVal value As SelectList) 
     ' enter code here 
    End Set 
End Property 
+0

Je ne peux pas vous dire combien je vous remercie de votre réponse, je suis jacking w/ce CRM sur et en dehors pendant deux ou trois semaines, il était de prouver à ce propriétaire d'entreprise Web que je pouvais faire. NET depuis que je ne l'ai jamais touché. Personne ne semble jamais répondre à mes messages et je passe des heures à googler et essayer de convertir des exemples #C en VB. En attendant, j'ai été licencié, alors je suis en train de suivre un cours intensif sur .NET pour que je puisse le faire le plus rapidement possible et j'espère obtenir le job! Cela a fonctionné! BTW Je peux avoir beaucoup plus de messages à venir lol, je dois les sauver maintenant ... Souhaitez-moi bonne chance! – KacieHouser

+0

Mise en garde retirée, PylonsN00b confirmée correcte. @ PylonsN00b Je vais vous ajouter à mes favoris et voir comment je peux vous aider. Des questions claires et détaillées que vous avez ici, il est facile et agréable de répondre. Vous pouvez éditer votre question pour obtenir le formatage du deuxième exemple de code correct. –