【发布时间】:2020-01-29 00:51:20
【问题描述】:
我正在开发一个网站,但我正在努力处理传递给我的视图的模型。我最终测试了它是否以最基本的方式工作,以确保我没有做任何明显错误的事情。还是不行:
我的控制器:
public class HomeController : Controller
{
public ActionResult Test()
{
List<Model_Test> model = new List<Model_Test>
{
new Model_Test{Name = "Henri", Age = 24, City = "Paris"},
new Model_Test{Name = "Jacob", Age = 18, City = "Caen"},
new Model_Test{Name = "Patrick", Age = 57, City = "Lille"},
new Model_Test{Name = "Youri", Age = 13, City = "Bordeaux"},
};
return View(model);
}
}
我的模特:
public class Model_Test
{
public string Name { get; set; }
public int Age { get; set; }
public string City { get; set; }
}
我的视图是我通过右键单击 ActionResult Test() 创建的视图。我将其设置为 List 并以 Model-test 作为模型。
@model IEnumerable<AVdevWebsite.Models.Model_Test>
但由于出现此错误,我无法显示我的小列表:
传入字典的模型项的类型为“System.Collections.Generic.List”1[AVdevWebsite.Models.Model_Test]”,但此字典需要类型为“AVdevWebsite.Models.Model_User”的模型项。
谢谢!
编辑:
主视图:
<!-- #region Modal -->
using (Html.BeginForm())
{
@model AVdevWebsite.Models.Model_User
@Html.AntiForgeryToken()
<div class="modal fade" id="LoginModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"
aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="text-center">
<div class="form-signin">
<img class="mb-4" src="~/Content/Images/User_Icon.png" width="72" height="72" />
<h2 class="h3 mb-3 font-weight-normal">Se Connecter</h2>
<hr />
@if (Session[ErrorAlerts.ERRORALERT] != null)
{
<div class="alert alert-danger" role="alert">@Session[ErrorAlerts.ERRORALERT]</div>
}
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.LabelFor(model => model.Username, htmlAttributes: new { @class = "sr-only" })
@Html.EditorFor(model => model.Username, new { htmlAttributes = new { @class = "form-control", @placeholder = "Identifiant" } })
@Html.ValidationMessageFor(model => model.Username, "", new { @class = "text-danger" })
@Html.LabelFor(model => model.Password, htmlAttributes: new { @class = "sr-only" })
@Html.EditorFor(model => model.Password, new { htmlAttributes = new { @class = "form-control", @placeholder = "Mot de Passe" } })
@Html.ValidationMessageFor(model => model.Password, "", new { @class = "text-danger" })
<hr />
<button class="btn btn-lg btn-primary" type="submit">Login</button>
<a class="disabled btn btn-lg btn-primary">Invité</a>
</div>
</div>
</div>
</div>
</div>
}
<!-- #endregion -->
这是部分视图:
@model IEnumerable<AVdevWebsite.Models.Model_Test>
@{
ViewBag.Title = "Test_ManageUsers";
}
<h2>Test_ManageUsers</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table class="table">
...
</table>
错误是由于主视图要求@model。
【问题讨论】:
-
根据提供的代码,这看起来是正确的。您在视图顶部没有重复的“@model”语句或奇怪的东西?您确定它使用了正确的视图吗?尝试显式指定视图 View("Test", model),假设视图在 Views 文件夹中正确命名为“Test.cshtml”。
-
你的控制器正在使用
Model_Test,而视图期望Model_User。因此,@BryanLewis 建议检查您是否“加载”了正确的视图。 -
还要检查您的视图,看看是否有其他视图正在其中呈现。您的 Controller 和 View 模型关联可能是同步的,但您的主视图可能会将其模型传递到另一个期望不同类型模型的视图。 (例如,您的视图是否通过期望 Model_User 类型模型的局部视图显示用户信息?)
-
感谢大家的快速反应。你是对的@Steven,我的主要布局使用模型 Model_User 作为模态表单,我只需要关注它的范围对吗?
-
添加部分视图的代码以及包含它的主视图中的行。
标签: asp.net-mvc