C# 在这个场景中,如何从视图中的HTML表向POST方法发送数据?

C# 在这个场景中,如何从视图中的HTML表向POST方法发送数据?,c#,asp.net-mvc,asp.net-core-mvc,viewmodel,C#,Asp.net Mvc,Asp.net Core Mvc,Viewmodel,我在视图中的HTML表中显示了一些数据。现在,我想做的是,单击一个按钮(比如SUBMIT按钮),我想将数据发送到控制器的POST方法,以便将数据保存到数据库中 我曾尝试使用modelbinding技术获取数据,但是POST方法中的ViewModel对象显示为null 模型和视图模型 // Model Model.cs public class MyModel { [Key] public int Id { get; set; } public string Fi

我在
视图中的
HTML
表中显示了一些数据。现在,我想做的是,单击一个按钮(比如
SUBMIT
按钮),我想将数据发送到控制器的POST方法,以便将数据保存到数据库中

我曾尝试使用
modelbinding
技术获取数据,但是
POST
方法中的
ViewModel
对象显示为
null

模型和视图模型

// Model Model.cs    
public class MyModel
{
    [Key]
    public int Id { get; set; }

    public string FirstName { get; set; }
    public string LastName { get; set; }
    ...
}

// ViewModel MyViewModel.cs
public class MyViewModel
{
            public int Id { get; set; }

    public string FirstName { get; set; }
    public string LastName { get; set; }
    ...
    public List<MyModel> MyModelList { get; set; }
}

// ViewModel VMList.cs
public class VMList
{
    public List<MyViewModel> MyViewModelList { get; set; }
}
发布方法

[HttpPost]
public IActionResult MyAction(VMList vmListObject)
{
    return View();
}

如何将
视图中表格中显示的数据返回到
控制器

根据您给定的模型,尝试使用
asp作为标记帮助器,使用
名称作为模型绑定属性

@model  VMList
<form asp-action="MyAction" asp-controller="HomeController" id="myForm">
<div>
    <button type="submit" value="submit" id="submitButton">Submit</button>
    <table id="myTable">
        @{ int i = 0;}
        @foreach (var item in Model.MyViewModelList)
        {
            <thead>
                <tr>
                    <th>First Name</th>
                    <th>Last Name</th>
                    <th>Header 3</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>
                        <input asp-for="@item.FirstName" name="vmListObject.MyViewModelList[@i].FirstName" />

                    </td>
                    <td>
                        <input asp-for="@item.LastName" name="vmListObject.MyViewModelList[@i].LastName"/>
                    </td>
                    <td>
                        <input asp-for="@item.Header3" name="vmListObject.MyViewModelList[@i].Header3" />
                    </td>
                </tr>
                @if (item.MyModelList != null && item.MyModelList.Count() != 0)
                {
                    <thead>
                        <tr>
                            <th>SubList Header 1</th>
                            <th>SubList Header 2</th>
                            <th>SubList Header 3</th>
                        </tr>
                    </thead>
                    <tbody>
                        @{ int j = 0;}
                        @foreach (var subItem in item.MyModelList)
                        {
                            <tr>
                                <td>
                                    <input asp-for="@subItem.FirstName" name="vmListObject.MyViewModelList[@i].MyModelList[@j].FirstName"/>
                                </td>
                                <td>
                                    <input asp-for="@subItem.LastName" name="vmListObject.MyViewModelList[@i].MyModelList[@j].LastName" />
                                </td>
                                <td>
                                    test
                                </td>
                            </tr>
                            j++;
                        }

                    </tbody>
                  }
            </tbody>
           i++;
         }
    </table>
</div>
</form>
@model-VMList
提交
@{int i=0;}
@foreach(Model.MyViewModelList中的变量项)
{
名字
姓
标题3
@if(item.MyModelList!=null&&item.MyModelList.Count()!=0)
{
子列表标题1
子列表标题2
子列表标题3
@{int j=0;}
@foreach(item.MyModelList中的var子项)
{
测试
j++;
}
}
i++;
}

根据您给定的模型,尝试对
标记帮助程序使用
asp,对模型绑定使用
name
属性

@model  VMList
<form asp-action="MyAction" asp-controller="HomeController" id="myForm">
<div>
    <button type="submit" value="submit" id="submitButton">Submit</button>
    <table id="myTable">
        @{ int i = 0;}
        @foreach (var item in Model.MyViewModelList)
        {
            <thead>
                <tr>
                    <th>First Name</th>
                    <th>Last Name</th>
                    <th>Header 3</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>
                        <input asp-for="@item.FirstName" name="vmListObject.MyViewModelList[@i].FirstName" />

                    </td>
                    <td>
                        <input asp-for="@item.LastName" name="vmListObject.MyViewModelList[@i].LastName"/>
                    </td>
                    <td>
                        <input asp-for="@item.Header3" name="vmListObject.MyViewModelList[@i].Header3" />
                    </td>
                </tr>
                @if (item.MyModelList != null && item.MyModelList.Count() != 0)
                {
                    <thead>
                        <tr>
                            <th>SubList Header 1</th>
                            <th>SubList Header 2</th>
                            <th>SubList Header 3</th>
                        </tr>
                    </thead>
                    <tbody>
                        @{ int j = 0;}
                        @foreach (var subItem in item.MyModelList)
                        {
                            <tr>
                                <td>
                                    <input asp-for="@subItem.FirstName" name="vmListObject.MyViewModelList[@i].MyModelList[@j].FirstName"/>
                                </td>
                                <td>
                                    <input asp-for="@subItem.LastName" name="vmListObject.MyViewModelList[@i].MyModelList[@j].LastName" />
                                </td>
                                <td>
                                    test
                                </td>
                            </tr>
                            j++;
                        }

                    </tbody>
                  }
            </tbody>
           i++;
         }
    </table>
</div>
</form>
@model-VMList
提交
@{int i=0;}
@foreach(Model.MyViewModelList中的变量项)
{
名字
姓
标题3
@if(item.MyModelList!=null&&item.MyModelList.Count()!=0)
{
子列表标题1
子列表标题2
子列表标题3
@{int j=0;}
@foreach(item.MyModelList中的var子项)
{
测试
j++;
}
}
i++;
}

首先,要从表单向controller提交任何数据,您需要输入字段。我在您的表单中看不到任何输入字段。其次,您的表单操作是
MyController.MyAction
,但在您的post方法中,您显示了
Index
方法。很抱歉,这是一个输入错误。我已在代码中更正了它。这是正确的n当我点击Submit按钮后收到对POST方法的调用时,实际代码。
MyAction
方法看起来仍然不正确,因为它不接受任何参数,请将您的实际代码粘贴到此处。再次出现愚蠢的键入错误。非常抱歉。我应该在发布之前修改代码。但是,在a中它是正确的实际代码。现在回到我的第一个问题,您需要输入字段来提交表单中的任何内容。您可以为
中要提交给控制器的每个值创建一些隐藏字段。但是,要正确命名,您必须正确命名。我建议您查看一下编辑器模板。首先,要从表单向controller提交任何数据,您需要输入字段。我在您的表单中看不到任何输入字段。其次,您的表单操作是
MyController.MyAction
,但在您的post方法中,您显示了
Index
方法。很抱歉,这是一个输入错误。我已在代码中更正了它。它在实际的co中是正确的de当我点击Submit按钮时收到对POST方法的调用。
MyAction
方法看起来仍然不正确,因为它不接受任何参数,请将您的实际代码粘贴到此处。再次出现愚蠢的键入错误。非常抱歉。我应该在发布之前修改代码。但是,它在实际代码中是正确的。现在回到我的第一个问题,您需要输入字段来提交表单中的任何内容。您可以为
中要提交给控制器的每个值创建一些隐藏字段