2016-05-13 2 views
4

Текущая ситуация: Начиная с разработки ASP.net MVC и из разработки приложений MVVM. Я борюсь с привязкой вида с моделью/контроллером представления. Я начал с пустого проекта и попытался создать модель, viewmodel, контроллер и представление. Запуск проекта я получаю «Внутренняя ошибка сервера 500», но не понимаю, что не так (в окне вывода нет ошибки). Я просто не могу понять, как представление действительно привязывается к модели представления (возможно, потому, что я слишком много думаю о MVVM).Asp.net MVC привязка для просмотра модели

То, что я в настоящее время:

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); 
    } 
} 

Модель:

using System; 

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

ViewModel:

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" 
      }); 
     } 
    } 
} 

Контроллер:

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

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

Вид:

@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> 

Я нашел много статей, говорящих о модели связывания, но они говорят только о формах и ввода. Я хочу показать некоторые данные, например. из базы данных в каком-то списке или около того и, следовательно, не нужно публиковать какую-либо дату на веб-сайте.

Кто-нибудь видит (возможно очевидную) проблему в моем примере кода?

Проект основан на ASP.net MVC 5 6 использованием DNX.

Я уже установил некоторые точки останова, чтобы увидеть, действительно ли контроллер вызван. И это. Я прошел через несколько методов с отладчиком без каких-либо проблем. Кроме того, в окне вывода не отображается никаких ошибок или sth. как это.

+1

Вы пробовали переходить через код? Установите контрольную точку в 'Index()', и вы должны найти, где происходит ошибка. Возможно, вы даже не попали в ваш контроллер. –

+1

Его очень общая ошибка. вы можете попробовать поставить некоторые точки останова (индексный метод) и посмотреть, будет ли он запущен.вы также можете проверить инструменты разработчика (сеть), чтобы проверить адрес URL. Также проверьте определение метода класса Routeconfig. Это те моменты, о которых я могу думать сейчас. – riteshmeher

+1

Показать запуск. Это может быть проблема конфигурации при запуске. Вы не очень подробно рассказали о проблеме. 500 может быть что угодно. Вы начали с пустого проекта, поэтому есть основания полагать, что вы, возможно, оставили что-то, что было необходимо для запуска приложения. – Nkosi

ответ

0

В результате для метода GET отсутствует имя представления. Таким образом, вместо

return View(new SampleViewModel()); 

он должен быть

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

Я думал, что связь между представлением и контроллером чисто условность основе. Таким образом, контроллер с именем Sample ищет вид с именем Sample в папке с именем Sample, которая, в свою очередь, является подпапкой Views.

Не знаете, почему, но это работает так.

+0

MVC действительно использует соглашение, чтобы определить, как найти правильный вид. На самом деле вы были довольно близки, но то, что вы пропустили, состоит в том, что структура не просто использует имя контроллера, но также использует имя действия. В вашем случае, если бы вы создали представление '~/Views/Sample/Index.cshtml', это было бы правильно расположено и отображено без необходимости указывать имя представления в операторе' return'. Обратите внимание, что 'Index.cshtml' соответствует действию' Index' на вашем контроллере. –

Смежные вопросы