@model在asp.net mvc 5视图中给出错误

时间:2018-04-17 06:58:37

标签: asp.net-mvc entity-framework-6

我是asp.net MVC的新手,我有以下控制器,Model&查看和我使用数据库第一种方法与EF和使用Storedprocedure返回结果。

创建EF6后,我可以在edmx页面下看到我的模型(不在模型下)

我附上了示例代码

控制器

 public class TestController : Controller
    {
        //
        // GET: /Test/

        public ActionResult Index()
        {
            RBACv3Entities test = new RBACv3Entities();
            var result =  test.testing();

            return View(result.ToList());

        }
    }

模型

public partial class test
    {
        public int id { get; set; }
        public string name { get; set; }
    }

查看

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<table align="center" border="1" cellpadding="4" cellspacing="4">
    <tr>
        <th style="background-color: Yellow;color: blue">Customer ID</th>
        <th style="background-color: Yellow;color: blue">Customer Name</th>
        <th style="background-color: Yellow;color: blue">City</th>
        <th style="background-color: Yellow;color: blue">Country</th>
    </tr>
    @foreach (var item in Model)
    {
        <tr>
            <td>@item.id</td>
            <td>@item.name</td>
            <td>NULL</td>
            <td>NULL</td>
        </tr>
    }
</table>  

如果我在Razor视图中使用@model在我的页面顶部,我收到错误并且不允许在顶部使用@ model.test但我可以在不使用顶部的情况下访问所有结果。什么时候应该在Razor顶部使用@model。

错误

CS0119: 'Mypro.test' is a 'type', which is not valid in the given context

查看我与@model一起使用

@model Mypro.test
@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<table align="center" border="1" cellpadding="4" cellspacing="4">
    <tr>
        <th style="background-color: Yellow;color: blue">Customer ID</th>
        <th style="background-color: Yellow;color: blue">Customer Name</th>
        <th style="background-color: Yellow;color: blue">City</th>
        <th style="background-color: Yellow;color: blue">Country</th>
    </tr>
    @foreach (var item in Mypro.test)
    {
        <tr>
            <td>@item.name</td>

        </tr>
    }
</table>  

1 个答案:

答案 0 :(得分:0)

我认为你的模型应该是@model IEnumerable<Mypro.test>,因为你想迭代它。

然后你必须纠正你的foreach循环:

@foreach (var item in Model)
{
    <tr>
        <td>@item.name</td>

    </tr>
}

要回答您的问题,何时应使用@model的模型声明: 您的视图将被编译,如果省略模型声明,编译器将仅使用dynamic作为类型。这意味着在编译期间无法检查.Name之类的属性是否确实存在。如果您在尝试调用该特定视图时没有收到错误。

通过提供有关模型结构的信息,声明模型可帮助您和编译器在编译时发现错误。当编译器告诉你,你做错了什么时,你会在你的代码下面收到那些漂亮的潦草红线。