首页 > 解决方案 > 模型指令每个文档只能出现一次(将按钮添加到列表问题) 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();
    }
}

标签: c#asp.net-core-mvc

解决方案


asp-for="..."当您使用的模型/值没有这些属性时,您无法使用。您的模型被定义为IEnumerable<MyApplication.Models.Clients>视图的值是一个List<MyApplication.Models.Clients>对象。当您使用它时,它会在类型内<input asp-for="CODE">查找属性。但是,这个接口没有这样的属性。CODEIEnumerable<...>

在您的情况下,您不需要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()操作的参数中。


推荐阅读