我的 ASP.NET Core 按钮根本不发送任何内容(ASP.NET Core MVC 和 C#)

问题描述 投票:0回答:2

我已经编写了这个按钮,但它不能正常工作,它没有调用控制器文件中的 create HTTP 方法:

讲讲看:

@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>

单击“插入”按钮后,它不会执行任何操作,我的 Create 方法甚至没有在控制器文件中调用(空参数)

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 asp.net-core-mvc
2个回答
0
投票

您的视图收到

MyApplication.Models.Clients
的集合,当您单击提交按钮时,您将
Clients
的集合发送到控制器。

因此,如果您想将

Clients
类型的对象从视图发送到控制器,您应该创建另一个接收
MyApplication.Models.Clients
模型的操作和视图,如下所示。

创建视图:

@model 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>

控制器:

[HttpGet]
public ActionResult Create()
{
     return View();
}
[HttpPost]
public ActionResult Create(Clients clients)
{
    try
    {
        if (ModelState.IsValid)
        {
            dbContext.InsertData(clients);
            return RedirectToAction("Index");
        }
        return View(clients);
    }
    catch
    {
        return View();
    }
}

0
投票

我希望问题能得到解决。将属性 [HttpPost] 添加到控制器方法就可以了。如果也这样做了,请尝试添加 .cshtml 视图中未使用的剩余模型属性元素并保持隐藏。所以会绑定模型。

我的例子:如果文件未上传到输入,并单击按钮。这不是击中帖子方法。但当我将 .cshtml 中的表单内的元素添加为隐藏时,它就起作用了。我能够单击按钮并进入后控制器方法。

© www.soinside.com 2019 - 2024. All rights reserved.