ASP MVC在视图中使用来自其他项目的DTO

时间:2018-02-23 09:32:11

标签: c# asp.net-mvc

我需要将WinForm应用程序转换为MVC应用程序。我只需要用新的MVC项目替换客户端。在旧的应用程序中,他们使用不同的项目来分隔各种布局,所有数据都通过DTO传输。现在,在我的MVC项目中,我可以访问控制器中的DTO并输入ViewData,但我不知道如何在视图中使用它,Visual Studio告诉我它不知道它的类型DTO。在下图中,AllDevice是控制器中创建的Device.Dto列表 Image of the error

这是我的控制器:

private CallServer cs = new CallServer();
    // GET: DeviceManager
    public ActionResult GetAllDevice()
    {
        List<DeviceDto> AllDevice = new List<DeviceDto>();
        AllDevice = cs.GetAllDevice();
        ViewData["AllDevice"] = AllDevice;

        return View();
    }

以下是我的观点:

<body>
<h2>GetAllDevice</h2>
<table>
    <tr>
        <th>
            Nom de la machine
        </th>
    </tr>
    @foreach (var device in (DeviceDto)ViewData["AllDevice"])
</table>

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

你不应该把它放在ViewData中,而是让它键入&#34; Model&#34;对于视图。

  1. 删除ViewData["AllDevice"] = AllDevice;
  2. return View();更新为return View(AllDevice);
  3. 在Razor视图中,您需要使用完整命名空间定义模型,在View.cshtml文件的第一行添加:@model MyFull.Namespace.AllDevice(当然,使其成为正确的命名空间)
  4. 您可以通过@foreach (var device in Model) ...
  5. 进行枚举