从 Action 返回模型以查看
Returning a Model to View from Action
我是 ASP.NET MVC Web 应用程序的新手。
我在尝试访问时遇到以下错误:
http://localhost:1160/View/ViewMovies
ViewMovies 是一个 returns 要查看的模型的动作。同样,我有一个名为 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
我做错了什么?
如何删除这些错误?
关于处理视图或视图模型我应该了解什么?
提前致谢。
您的控制器名为 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 视图时,您必须采用文字名称并将其作为
放在 return 溢出中
return View("Customer",model)
或者在构造控制器时,您可能需要右键单击控制器的名称和 select selected 控制器的选项 "Create view",这会自动将这两者绑定在一起.
视图与控制器不共享相同的命名约定
我是 ASP.NET MVC Web 应用程序的新手。
我在尝试访问时遇到以下错误: http://localhost:1160/View/ViewMovies
ViewMovies 是一个 returns 要查看的模型的动作。同样,我有一个名为 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
我做错了什么?
如何删除这些错误?
关于处理视图或视图模型我应该了解什么?
提前致谢。
您的控制器名为 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 视图时,您必须采用文字名称并将其作为
放在 return 溢出中return View("Customer",model)
或者在构造控制器时,您可能需要右键单击控制器的名称和 select selected 控制器的选项 "Create view",这会自动将这两者绑定在一起.
视图与控制器不共享相同的命名约定