2016-05-13 14 views
4

Aktuelle Situation: Beginnend mit ASP.net MVC Entwicklung und von MVVM App Entwicklung Ich bin mit der Bindung einer Ansicht mit Ansicht Modell/Controller kämpfen. Ich habe mit einem leeren Projekt begonnen und versucht, Model, Viewmodel, Controller und View zu erstellen. Beim Starten des Projekts bekomme ich einen "500 Internal Server Error", verstehe aber nicht was falsch ist (kein Fehler im Ausgabefenster). Ich kann einfach nicht verstehen, wie eine Ansicht tatsächlich an ein Ansichtsmodell bindet (wahrscheinlich, weil ich zu viel in MVVM denke).Asp.net MVC Bindung zu Modell

Was ich derzeit haben:

Startup.cs:

using Microsoft.AspNet.Builder; 
using Microsoft.AspNet.Hosting; 
using Microsoft.Extensions.DependencyInjection; 

namespace WebApplication1 
{ 
    public class Startup 
    { 
     // This method gets called by the runtime. Use this method to add services to the container. 
     // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940 
     public void ConfigureServices(IServiceCollection services) 
     { 
      services.AddMvc(); 
     } 

     // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 
     public void Configure(IApplicationBuilder app) 
     { 
      app.UseIISPlatformHandler(); 

      app.UseMvc(routes => 
      { 
       routes.MapRoute(
        name: "default", 
        template: "{controller=Sample}/{action=Index}/{id?}"); 
      }); 
     } 

     // Entry point for the application. 
     public static void Main(string[] args) => WebApplication.Run<Startup>(args); 
    } 
} 

Modell:

using System; 

namespace WebApplication1.Models 
{ 
    public class SomeModel 
    { 
     public string Title { get; set; } 
     public DateTime Time { get; set; } 
    } 
} 

Ansichtsmodell:

using System; 
using System.Collections.Generic; 
using WebApplication1.Models; 

namespace WebApplication1.ViewModels 
{ 
    public class SampleViewModel 
    { 
     public IList<SomeModel> SomeModels { get; set; } 

     public SampleViewModel() 
     { 
      SomeModels = new List<SomeModel>(); 
      SomeModels.Add(new SomeModel() 
      { 
       Time = DateTime.Now, 
       Title = "Hallo" 
      }); 
     } 
    } 
} 

Controller:

using Microsoft.AspNet.Mvc; 
using WebApplication1.ViewModels; 

namespace WebApplication1.Controllers 
{ 
    public class SampleController : Controller 
    { 
     // 
     // GET: /Sample/ 
     public IActionResult Index() 
     { 
      return View(new SampleViewModel()); 
     } 
    } 
} 

Ausblick:

@model WebApplication1.ViewModels.SampleViewModel 

<!DOCTYPE html> 
<html> 
<head> 
    <title>Hallo</title> 
</head> 
<body> 
    @foreach (var someModel in Model.SomeModels) 
    { 
     <div>@someModel.Title</div> 
    } 
</body> 
</html> 

ich viele Artikel sprechen über Modell gefunden Bindung sondern sie nur über Formulare und Eingabe sprechen. Ich möchte einige Daten zeigen, z.B. aus einer Datenbank in irgendeiner Art von Liste oder so und müssen daher kein Datum auf der Website veröffentlichen.

Kann jemand das (wahrscheinlich offensichtlich) Problem in meinem Beispielcode sehen?

Das Projekt basiert auf ASP.net 5 MVC 6 mit DNX.

Ich habe bereits einige Haltepunkte gesetzt, um zu sehen, ob der Controller tatsächlich aufgerufen wird. Und es ist. Ich habe die paar Methoden mit dem Debugger ohne Probleme durchlaufen. Das Ausgabefenster zeigt auch keinen Fehler oder etw an. so wie das.

+1

Haben Sie versucht, den Code durchzugehen? Setzen Sie einen Haltepunkt bei Index() 'und Sie sollten herausfinden, wo der Fehler passiert. Vielleicht treffen Sie nicht einmal Ihren Controller –

+1

Es ist ein sehr allgemeiner Fehler. Was Sie versuchen können, ist, einige Haltepunkte (Index-Methode) zu setzen und zu sehen, ob es gefeuert wird.Sie können auch Entwickler-Tools (Netzwerk) einchecken, um die URL-Adresse zu überprüfen. Überprüfen Sie auch die Methodendefinition der Routeconfig-Klasse. Dies sind die Punkte, an die ich jetzt denken kann. – riteshmeher

+1

Start anzeigen. Es könnte ein Startkonfigurationsproblem sein. Sie haben nicht wirklich viel zu dem Thema angegeben. 500 Fehler könnten alles sein. Du hast mit einem leeren Projekt angefangen, also liegt es nahe, dass du etwas vergessen hast, das benötigt wurde, um die App auszuführen. – Nkosi

Antwort

0

Der Ansichtsname fehlte im Ergebnis der GET-Methode. Anstatt also

return View(new SampleViewModel()); 

muss es sein

return View("Sample", new SampleViewModel()); 

Ich dachte, dass die Verbindung zwischen View und Controller ist rein Konvention basiert. So sucht ein Controller namens Sample nach einer Ansicht namens Sample in einem Ordner namens Sample, der wiederum ein Unterordner von Views ist.

Nicht genau, warum genau, aber es funktioniert so.

+0

MVC verwendet in der Tat Konvention, um zu bestimmen, wie die richtige Ansicht zu finden ist. Du warst ziemlich nah dran, aber was du verpasst hast ist, dass das Framework nicht nur den Controller-Namen benutzt, sondern auch den Namen der Aktion. Wenn Sie in Ihrem Fall eine '~/Views/Sample/Index.cshtml'-Ansicht erstellt hätten, wäre diese korrekt lokalisiert und gerendert worden, ohne dass der View-Name in der' return'-Anweisung angegeben werden musste. Beachten Sie, dass "Index.cshtml" mit der "Index" -Aktion auf Ihrem Controller übereinstimmt. –