如何使用 C 在 ASP.NET MVC 5 中将多个数据从视图更新(传递)到控制器#

How to Update (pass) multiple data from view to controller in ASP.NET MVC 5 using C#

提问人:Manatchanok Bumrungban 提问时间:10/30/2023 最后编辑:marc_sManatchanok Bumrungban 更新时间:10/30/2023 访问量:46

问:

我在将数据从视图传递到控制器时遇到了问题。实际上,我试图从这个社区中的许多问题和答案中搜索和学习,但仍然不起作用。它总是在控制器中发送回“null”。

目前我不知道如何解决它。

此视图的概念是 ,向员工显示评估员和评估表。赋值器和表单类型可以更改。此视图用于在评估器或表单需要更改时进行查看和更新。

所以这里是代码:

模型类:

using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
using System;

namespace OTWebApplication.Models
{
    public class AP_UserForm
    {
        [Key()]
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public String UFID { get; set; }
        public String UF_YID { get; set; }
        public String UF_FormID { get; set;}
        public String UF_FormName { get; set; }
        public String UF_EvaID { get; set; } 
        public String UF_EvaName { get; set; }
        public String UF_RootID { get; set; } 
        public String UF_RootName { get; set; }
        public String UF_Available { get; set; } 
        public String UF_STID { get; set; } 
    }

    public class AP_UserFormL
    {
        public List<AP_UserForm> AP_UserForm { get; set; }
    }
}

[HTML全文]

@model OTWebApplication.Models.AP_UserFormL
<form asp-action="UpdateAll" method="post">
        <table class="table">
            <thead>
                <tr>
                    <th>EmployeeID</th>
                    <th>EmployeeName</th>
                    <th>EvaluatorID</th>
                    <th>FormName</th>
                    <th></th>
                </tr>
            </thead>
            <tbody>
                @if (Model != null)
                {
                        @for (var i = 0; i < Model.AP_UserForm.Count(); i++)
                {
                            <tr>
                                <td>
                                    <input asp-for="@Model.AP_UserForm[i].UFID" class="form-control" />
                                </td>
                                <td>
                                    <input asp-for="@Model.AP_UserForm[i].UF_RootName" class="form-control" />
                                </td>
                                <td>
                                    <select asp-for="@Model.AP_UserForm[i].UF_EvaID" class="form-control">
                                        @foreach (var item in ViewBag.ARoot)
                                        {
                                            <option value="@item.ARoot_ID">@item.ARoot_Name</option>
                                        }
                                    </select>
                                </td>
                                <td>
                                    <select asp-for="@Model.AP_UserForm[i].UF_FormID" class="form-control">
                                        @foreach (var item in ViewBag.Form)
                                        {
                                            <option value="@item.FormID">@item.FormName</option>
                                        }
                                    </select>
                                </td>
                                <td>
                                    <select asp-for="@Model.AP_UserForm[i].UF_Available" class="form-control">
                                        <option value="0">ไม่ต้องประเมิน</option>
                                        <option value="1">ประเมินปกติ</option>
                                    </select>
                                </td>
                            </tr>
                        }
                }
            </tbody>
        </table>
    <button input type="submit" value="Edit">Update</button>
</Form>

C#

[HttpPost]
public IActionResult UpdateAll(AP_UserFormL model)
{
    ModelState.Clear();

    if (model != null && model.AP_UserForm.Count>0)
    {
        Console.WriteLine("not null");
    }
    else 
    {
        Console.WriteLine("null"); 
    }

    return RedirectToAction("ManageAP", "Appraisal");
}
C# ASP.NET-MVC-5

评论


答:

0赞 Sadikul Haque Sadi 10/30/2023 #1

检查“网络”选项卡(有效负载、预览部分)以验证前端是否按预期发送数据(控制器将接收的正确格式)。

如果它正确发送数据,则尝试在操作方法中添加 [FromBody] 标记

[HttpPost]
public IActionResult UpdateAll([FromBody] AP_UserFormL model)

评论

0赞 Manatchanok Bumrungban 10/30/2023
签入有效载荷,所有数据都正确无误。已添加 [FromBody]。仍将 NULL 发送回控制器。