【问题标题】:Inserting Multiple rows in ASP.NET MVC在 ASP.NET MVC 中插入多行
【发布时间】:2020-09-09 18:54:29
【问题描述】:

我在我的数据库中插入多个数据时遇到问题。这是我下面的代码:

上下文类:

 public void Add(IEnumerable<UserInformation> model)
 {   
        foreach(UserInformation user in model)
        {
            _db.Add(user);
        }

        _db.SaveChanges();                                        
 }

这是我的控制器:

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Add(IEnumerable<UserInformation> userInformation)
{
        if (!ModelState.IsValid)
        {
        }   

       _ui_context.Add(userInformation);

        return new JsonResult("User Saved!");
}

这是我的看法:

 @model IEnumerable<MyMVC.Models.UserInformation>
 <form method="POST" id="form_data">                                               
                    <input type="hidden" id="action_value" value="" />
                    <table id="tbl_data" class="table table-bordered">
                        <thead>
                            <tr>
                                <th>First Name</th>
                                <th>Last Name</th>
                                <th>Location</th>
                            </tr>
                        </thead>
                        <tbody id="table_data">

                            <tr>
                                <td>
                                    <input  type="hidden" id="txtId" class="form-control" />
                                    <input name="firstname" class="form-control" id="txtFirst" />
                                    <span class="text-danger"></span>
                                </td>
                                <td>
                                    <input name="lastname" class="form-control" id="txtLast" />
                                    <span class="text-danger"></span>
                                </td>
                                <td>
                                    <input  name="location" class="form-control" id="txtLocation" />
                                    <span class="text-danger"></span>
                                </td>
                            </tr>


                        </tbody>                             
                    </table>                                   
                </form>              
                <a class="btn btn-info" id="btnAddField">Click to Add more Fields</a>

这是我的 AJAX:

添加字段的代码

//Add fields
        var i = 1;
        $(document).on("click", "#btnAddField", function () {

            $("#table_data").append("<tr>"
                + "<td><input asp-for='FirstName' name='firstname' class='form-control' id='txtFirst" + i + "' />"
                + "<span class='text-danger'></span ></td>"
                + '<td><input asp-for="LastName" name="lastname" class="form-control" id="txtLast' + i + '" />'
                + '<span class="text-danger" ></span ></td>'
                + '<td><input asp-for="Location" name="location" class="form-control" id="txtLocation'+i+'" />'
                + '<span class="text-danger"></span ></td>'
                + "</tr > ");

            i++;
        });

POST 中的代码

var data = $('#form_data').serialize();                

                $.ajax({
                    method: "POST",
                    url: "/UserInformation/Add",
                    data: data,
                    dataType: "JSON",
                    success: function (data) {
                        alert(data);
                        clearFields();
                        $("#exampleModal").modal("hide");
                        loadUser();
                    }
                });        

我每次调试 ajax 时都会得到一个空响应。如果您能帮我解决这个问题,我将非常感激。

谢谢!

【问题讨论】:

  • 验证码块真的是空的吗?另外:调试时是否检查过传递给控制器​​的数据?
  • 我刚刚删除了验证。当我检查调试时传递的数据时,它显示 Count = 0 @DavideVitali
  • $('#form_data').serialize(); 的结果是什么你是在控制器的 add 方法中获取数据吗?浏览器控制台中是否有任何错误或您在浏览器控制台中检查了网络选项卡?
  • 当我提醒 form_data i.stack.imgur.com/RHCIw.png @Hardik 时,我得到了这个结果
  • @PriyankPanchal Ef 可以从您添加到用户的类型中推断出,只有 _db.Add(entity) 实体是 User。如果有人将 user 命名为 obj 或给出 _db.add(obj) 的名称,那么 _db.Users.Add() 就不会那么好读了,我想说的是可读性更好。

标签: c# asp.net-mvc


【解决方案1】:

要使模型绑定起作用,您需要在 name 属性中为字段提供索引。 看看这个问题,我answered 有一个非常相似的问题:

所以您的代码需要如下所示,但请注意,在 javascript 中使用 asp-for 可能不起作用,因为要使其工作,标签助手必须呈现在服务器端,您只是在其中附加 html到dom。

您还需要为索引保留一个运行总计,因为每个 i 对于该组 UserInformation 都必须是唯一的。

<tr>
    <td>
        <input  type="hidden" id="txtId" class="form-control" />
        <input name="UserInformation[0].firstname" class="form-control" id="txtFirst" />
        <span class="text-danger"></span>
    </td>
    <td>
        <input name="UserInformation[0].lastname" class="form-control" id="txtLast" />
        <span class="text-danger"></span>
    </td>
    <td>
        <input  name="UserInformation[0].location" class="form-control" id="txtLocation" />
        <span class="text-danger"></span>
    </td>
</tr>

//Add fields
var i = 1;
$(document).on("click", "#btnAddField", function () {

    $("#table_data").append("<tr>"
        + "<td><input asp-for='FirstName' name='UserInformation[i].firstname' class='form-control' id='txtFirst" + i + "' />"
        + "<span class='text-danger'></span ></td>"
        + '<td><input asp-for="LastName" name="UserInformation[i].lastname" class="form-control" id="txtLast' + i + '" />'
        + '<span class="text-danger" ></span ></td>'
        + '<td><input asp-for="Location" name="UserInformation[i].location" class="form-control" id="txtLocation'+i+'" />'
        + '<span class="text-danger"></span ></td>'
        + "</tr > ");

    i++;
});

【讨论】:

  • 非常感谢您的回答@Topher,我需要在每个输入标签中写 asp-for 吗?
  • 我的荣幸。不,你没有,正如我所说,它不会在你的 javascript 中工作,但它会工作,如果你只是编写普通的 html,它是首选方式。但我想说在你的情况下根本不要使用它,因为它只适用于前几个领域,然后不适用于其余领域,所以会很奇怪。您可以做的是在某处呈现一个测试 asp-for 标记,然后研究它生成的 html 并将其添加到您创建元素的 javascript 中,或者至少查看不使用 asp-for 和变得更聪明。 :)
  • 它的作品!非常感谢@Topher,你拯救了我的一天!
  • 太好了,很高兴听到它:)
猜你喜欢
  • 2016-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-18
  • 1970-01-01
  • 1970-01-01
  • 2017-10-06
  • 2014-06-27
相关资源
最近更新 更多