Возвращение модели для просмотра из действия
Я новичок в 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)
Или при создании контроллера вам может потребоваться щелкнуть правой кнопкой мыши имя контроллера и выбрать опцию "Создать представление" для выбранного контроллера, это автоматически связывает эти два элемента вместе.
Представления не имеют того же соглашения об именах, что и контроллеры