c# - 模型指令每个文档只能出现一次(将按钮添加到列表问题) ASP.NET MVC Core C#
问题描述
我正在尝试显示一个按钮,因为我需要添加新信息,但是文件中有一个列表并且它不起作用
我正在使用 ASP.NET Core MVC 和 C#。
它是这样的:
HTML 文件:
@model IEnumerable<MyApplication.Models.Clients>
<table class="table" id="Tabla4">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.CODE)
</th>
<th>
@Html.DisplayNameFor(model => model.NAME)
</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.CODE)
</td>
<td>
@Html.DisplayFor(modelItem => item.NAME)
</td>
<td>
</td>
</tr>
}
</tbody>
</table>
我的控制器方法:
public ActionResult Create()
{
List<Clients> clients = dbContext.GetClients().ToList();
return View(clients);
}
我想在我的 HTML 文件中添加这个:
<div class="row">
<div class="col-md-4">
<form asp-action="Create">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="CODE" class="control-label"></label>
<input asp-for="CODE" class="form-control" />
<span asp-validation-for="CODE" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="NAME" class="control-label"></label>
<input asp-for="NAME" class="form-control" />
<span asp-validation-for="NAME" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" />
</div>
</form>
</div>
</div>
我试图添加这个:
@Model MyApplication.Models.Clients
我收到此错误:
模型指令每个文档只能出现一次
我该如何解决?
编辑:
我的客户模型是这样的:
public class Clients{
public int CODE {get; set;}
public string NAME {get; set;}
}
如果我将按钮放在 HTML 文件中,它会抛出错误:
@model IEnumerable<MyApplication.Models.Clients>
<table class="table" id="Tabla4">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.CODE)
</th>
<th>
@Html.DisplayNameFor(model => model.NAME)
</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.CODE)
</td>
<td>
@Html.DisplayFor(modelItem => item.NAME)
</td>
<td>
</td>
</tr>
}
</tbody>
</table>
<div class="row">
<div class="col-md-4">
<form asp-action="Create">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="CODE" class="control-label"></label>
<input asp-for="CODE" class="form-control" />
<span asp-validation-for="CODE" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="NAME" class="control-label"></label>
<input asp-for="NAME" class="form-control" />
<span asp-validation-for="NAME" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" />
</div>
</form>
</div>
</div>
它说:
IEnumerable<MyApplication.Models.Clients> 不包含定义 CODE 并且没有可访问的扩展方法 CODE
IEnumerable<MyApplication.Models.Clients> 不包含定义 NAME 并且没有可访问的扩展方法 NAME
编辑#2
<div class="row">
<div class="col-md-4">
<form asp-action="Create">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label for="CODE" class="control-label"></label>
<input name="CODE" class="form-control" />
</div>
<div class="form-group">
<label for="NAME" class="control-label"></label>
<input name="NAME" class="form-control" />
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" />
</div>
</form>
</div>
</div>
编辑#3:
现在它抛出了这个错误:Object reference not set to an instance of an object,在 foreach 部分:
@model IEnumerable<MyApplication.Models.Clients>
<div class="row">
<div class="col-md-4">
<form asp-action="Create" method="post">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label for="CODE" class="control-label">Code:</label>
<input name="CODE" class="form-control" />
</div>
<div class="form-group">
<label for="NAME" class="control-label">Name:</label>
<input name="NAME" class="form-control" />
</div>
<div class="form-group">
<input type="submit" value="Insert" class="btn btn-primary" />
</div>
</form>
</div>
</div>
<table class="table" id="Tabla4">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.CODE)
</th>
<th>
@Html.DisplayNameFor(model => model.NAME)
</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.CODE)
</td>
<td>
@Html.DisplayFor(modelItem => item.NAME)
</td>
<td>
</td>
</tr>
}
</tbody>
</table>
图片:[![图片][1]][1]
这是我的控制器创建 HTTP 方法:
public ActionResult Create([Bind] Clients clients)
{
try
{
if (ModelState.IsValid)
{
dbContext.InsertData(clients);
return RedirectToAction("Index");
}
return View(clients);
}
catch
{
return View();
}
}
解决方案
asp-for="..."
当您使用的模型/值没有这些属性时,您无法使用。您的模型被定义为IEnumerable<MyApplication.Models.Clients>
视图的值是一个List<MyApplication.Models.Clients>
对象。当您使用它时,它会在类型内<input asp-for="CODE">
查找属性。但是,这个接口没有这样的属性。CODE
IEnumerable<...>
在您的情况下,您不需要asp-for=""
. 相反,您可以使用<input>
带有所需属性的“普通”标签name="..."
,具体取决于Create()
您定义的操作。代码可能如下所示:
<div class="form-group">
<label for="CODE" class="control-label">Code:</label>
<input name="CODE" class="form-control" />
</div>
这样,HTTP 请求将CODE
在 POST 正文或 GET URL 参数列表中具有字段名称,具体取决于您发送表单的方式。ASP.NET 会自动为您将值填充到您的Create()
操作的参数中。
推荐阅读
- python - Python:通过向所有元素添加字符串来更新列表
- sql - NodeJS + Express“错误:-2006,\,无法绑定参数”
- php - 我的路由组是否适用于需要正确编写管理员角色的路由?
- node.js - nodejs的链接文件地址的唯一GET()方法
- python - .py python 文件显示代码而不是在 webhost 上执行
- ansible - 在 playbook with_items 中运行所有任务
- azure-active-directory - 谷歌套件与 Azure Active Directory 的集成
- sass - sass:如何仅为移动设备渲染不同的图像
- email - 如何将 Outlook 发送的电子邮件与其相应的 Outlook 草稿(MAPI MailItem)唯一匹配
- c# - UWP XAML 和 C# - x:Bind 在 ResourceDictionary 内的 DataTemplate 上