Возвращение модели для просмотра из действия

Я новичок в ASP.NET MVC веб-приложений.

Я получаю следующую ошибку при попытке доступа: http://localhost:1160/View/ViewMovies

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

ошибка

ViewController.cs

 public class ViewController : Controller
{
    // GET: View
    public ActionResult Index()
    {
        return View();
    }

    private MovieCustomerViewModel model = new MovieCustomerViewModel();
    public ActionResult ViewMovies()
    {
        model.movies = new List<Movie> {
            new Movie{id=1,name="Shrek"},
            new Movie{id=1,name="Wall-e"}
        };
        return View(model);
    }

    public ActionResult ViewCustomers()
    {
        model.customers = new List<Customer> {
            new Customer{id=1,name="Junaid"},
            new Customer{id=1,name="Zohaib"}
        };
        return View(model);
    }
}

Я добавил папку просмотра с именем Movie_Customer:

Он имеет два отдельных файла.cshtml с именами Customers.cshtml и Movies.cshtml.

Customers.cshtml

@model Ex1.ViewModels.MovieCustomerViewModel


@{
    ViewBag.Title = "Customers";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Customers</h2>


<table class="table table-bordered table-hover" />
<tr>
    <th>ID</th>
    <th>Name</th>
</tr>

@{
    foreach (var v in Model.customers)
    {
        <tr>
            <td>v.id</td>
            <td>v.name</td>
        </tr>
    }
}

Movies.cshtml

@model Ex1.ViewModels.MovieCustomerViewModel

@{
    ViewBag.Title = "Movies";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Movies</h2>


<table class="table table-bordered table-hover" />
<tr>
    <th>ID</th>
    <th>Name</th>
</tr>

@{
    foreach (var v in Model.movies)
    {
        <tr>
            <td>v.id</td>
            <td>v.name</td>
        </tr>
    }
}

Я делаю именно то, что сделано здесь: http://techfunda.com/howto/240/return-model-to-view-from-action-method

Что я делаю неправильно?
Как мне удалить эти ошибки? Что я должен знать об обработке представлений или моделей представлений?

Заранее спасибо.

2 ответа

Решение

Ваш контроллер назван ViewController и по соглашению структура проверит ~Views/<ControllerNamePrefix>/ каталог и Views/Shared/ каталог для файла представления, соответствующего имени, которое вы запрашиваете (здесь вы запрашиваете ViewCustomers а также ViewMovies так как вы используете return View(model) фреймворк будет искать представление с именем, которое соответствует действию. Если вы хотите указать имя представления, используйте return View("ViewName", model))

Чтобы устранить вашу ошибку, вы можете переименовать ваш взгляд на ViewCustomers.cshtml а также ViewMovies.cshtml и поместите эти файлы в новый каталог: местоположение /Views/View/,

Лично я бы рекомендовал переименовать ваш контроллер, так как ViewController ничего не говорит о том, за что должен отвечать контроллер. В приложениях MVC большинство всех контроллеров будут возвращать представления.

В итоге:

  • Вы запрашиваете представления с именем ViewCustomers.cshtml а также ViewMovies.cshtml которые не существуют ни в одной папке.
  • Ваши представления не находятся в подкаталоге записи в Views папка для фреймворка, чтобы можно было их найти.

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

return View("Customer",model) 

Или при создании контроллера вам может потребоваться щелкнуть правой кнопкой мыши имя контроллера и выбрать опцию "Создать представление" для выбранного контроллера, это автоматически связывает эти два элемента вместе.

Представления не имеют того же соглашения об именах, что и контроллеры

Другие вопросы по тегам