从 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/ 目录以查找与您请求的名称相匹配的视图文件(此处为请求 ViewCustomersViewMovies 因为您正在使用 return View(model) 框架将查找名称与操作匹配的视图。如果您想指定视图的名称,请使用 return View("ViewName", model))

要解决您的错误,您可以将视图重命名为 ViewCustomers.cshtmlViewMovies.cshtml,并将这些文件放在新目录中:位置 /Views/View/

就个人而言,我建议也重命名您的控制器,因为 ViewController 并没有真正说明控制器应该负责什么。在 MVC 应用程序中,大多数控制器都会返回视图。

总结:

  • 您正在请求名为 ViewCustomers.cshtmlViewMovies.cshtml 的视图,它们在任何文件夹中都不存在。
  • 你的观点不在写 Views 文件夹中的子目录,以便框架能够找到 他们。

我认为您感到困惑,因为当您尝试从控制器中 return 视图时,您必须采用文字名称并将其作为

放在 return 溢出中
return View("Customer",model) 

或者在构造控制器时,您可能需要右键单击控制器的名称和 select selected 控制器的选项 "Create view",这会自动将这两者绑定在一起.

视图与控制器不共享相同的命名约定