Возвращение модели для просмотра из действия - PullRequest
0 голосов
/ 19 декабря 2018

Я новичок в ASP.NET MVC Web Applications.

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

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

Ошибка enter image description here

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:

enter image description here

. Имеет два отдельных файла .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 ]

0 голосов
/ 20 декабря 2018

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

return View("Customer",model) 

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

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

0 голосов
/ 19 декабря 2018

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

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

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

В итоге:

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