2009-01-30 6 views
0

J'ai une simple application MVC (RC1) mis en place, et je vois un comportement étrange. La page Accueil/Index affiche une liste d'éléments utilisant un ListView. Voici le code HomeController:MVC invoquant la page par défaut lors de l'ouverture d'une page différente?

Function Index() 
    ViewData("results") = From m In context.MyTable 
    Return View() 
End Function 

La page d'accueil/Index.aspx a juste un ListView là-dessus, et le code a derrière ceci:

Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    MyListView.DataSource = ViewData("results") 
    MyListView.DataBind() 
End Sub 

Cela fonctionne bien lors de la navigation à l'accueil/Index. Cependant, j'ai une autre vue et un contrôleur appelé Form. Il est juste un bout en ce moment, voici donc la FormController:

Function Index() 
    Return View() 
End Function 

Le formulaire/Index.aspx n'a pas de code derrière - encore une fois, juste un bout.

Le problème que je vois est que lorsque j'essaie de naviguer vers Form/Index, j'obtiens "La référence d'objet n'est pas définie sur une instance d'un objet". sur le code derrière Home/Index.aspx.vb. Pourquoi est-ce? J'essaie de m'éloigner de cette page - pourquoi essaie-t-elle d'exécuter le code? Si j'enveloppe le code comme ceci:

If ViewData("results") IsNot Nothing Then 
    MyListView.DataSource = ViewData("results") 
    MyListView.DataBind() 
End If 

tout fonctionne correctement, mais il ne semble pas que je devrais le faire. Est-ce que je manque quelque chose?

Mise à jour: Par demande, voici le contenu du formulaire/Index.aspx:

<%@ Page Title="" Language="VB" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="false" CodeBehind="Index.aspx.vb" Inherits="ProviderFeedback.Index" %> 
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server"> 
    <h3> 
     Enter Provider Feedback 
    </h3> 
    <form method="post" action="/Form/CreateNew"> 
     <%=Html.TextBox("member")%> 
     <input type="submit" value="Submit" /> 
    </form> 
</asp:Content> 
+0

Pouvez-vous inclure la totalité de Form/Index.aspx? Je sais que c'est "vide", mais j'aimerais voir les en-têtes. –

+0

Ajouté à la question. Pas techniquement "vide", mais je ne fais rien avec l'entrée. – gfrizzle

Répondre

1

Est-ce vrai?

Inherits="ProviderFeedback.Index" 

Cela ne devrait-il pas être Form.Index?

+0

C'est ce que VS a mis dedans. Si j'essaie de le changer, j'obtiens un conflit dans l'espace de noms ProviderFeedback. Puis-je avoir des vues nommées de la même manière dans différents dossiers? Dans la vue de classe, il apparaît que toutes les vues sont regroupées sous l'espace de noms du projet, quel que soit le dossier. – gfrizzle

+0

Vous pouvez avoir des vues nommées identiques dans différents dossiers si elles se trouvent dans des espaces de noms différents. Par défaut, l'espace de noms = le nom du dossier +. + Voir le nom. Cela explique votre problème, BTW. –

+0

Bizarre que VS ne s'en occupe pas automatiquement - il n'utilise que le nom du projet et le nom de la vue. J'ai d'abord créé le projet en utilisant la version bêta, donc je me demande s'il y a quelque chose de drôle entre les deux. Je vais essayer une nouvelle version et voir ce qui se passe. Merci de votre aide. – gfrizzle

Questions connexes