Aspnet.Core MVC,如何绑定一组输入的列表?

Aspnet.Core MVC, how to bind a list of a group of inputs?

我正在使用 aspnetcore mvc,dotnet 版本 6。我正在尝试在视图中获取输入。下面的代码我试图让买家用户和送货用户进入列表。但我无法将它们绑定到控制器的模型列表中。

这是我的代码:

public async Task<IActionResult> SendMainFlow(List<IFormFile> files, string[] DeliveryUsers, List<BuyerUsers> BuyersModel)
    {
        
        return BadRequest();
    }

从观点来看:

<form class="col-12 col-md-6" method="POST" action="/WorkManagement/SendMainFlow" enctype="multipart/form-data">
    <div class="">

        <label>
            Dosyalar:
        </label>
        <input type="file"
               class=" col-12"
               name="files"
               multiple/>
    </div>
    <hr class="row " />
    <div class="row m-1">
        <label class="col-12 text-primary">
            Satın alacak kişiler:
        </label>
        <div id="BuyerInputArea" class="col-lg-12">
            <div class="inputBuyerRow first-input">
                <div class="input-group mb-3">
                    <input type="text" name="BuyerUserName" class="form-control m-input col" placeholder="İsim" autocomplete="off">
                    <input type="text" name="BuyerUserLastName" class="form-control m-input col" placeholder="Soyisim" autocomplete="off">
                    <input type="text" name="BuyerUserMail" class="form-control m-input col" placeholder="E-Posta" autocomplete="off">
                    <div class="input-group-append">
                        <button id="removeBuyer" type="button" class="btn btn-danger">Kaldır</button>
                    </div>
                </div>
            </div>
            
            <button id="addBuyer" type="button" class="btn btn-info">Kişi Ekle</button>
        </div>
    </div>
    <hr class="row " />
    <div class="row m-1">
        <label class="col-12 text-primary">
            Dağıtılacak kişiler:
        </label>
        <div id="DeliveryInputArea" class="col-lg-12">
            <div id="DeliverySignerRow">
                <div class="input-group mb-3">
                    <input type="text" name="DeliveryUserMail" class="form-control m-input col" placeholder="Mail" autocomplete="off">
                    <div class="input-group-append">
                        <button id="removeRow" type="button" class="btn btn-danger">Kaldır</button>
                    </div>
                </div>
            </div>

            <div id="newRow"></div>
            <button id="addDealer" type="button" class="btn btn-info">Kişi Ekle</button>
        </div>
    </div>
    <div class="row m-2">
        <button class="col-12 btn btn-info" type="submit">
            İŞLEM BAŞLAT
        </button>
    </div>

</form> 

我可以在这里为任何类型的一个用户获取。我的意思是买家或交付用户。但我想获得用户列表。而且我的代码尝试在#BuyerUserArea 中动态添加#inputBuyerRow。

不要与代码混淆。代码很简单。我想 post 我的输入带有表单标签。在 Controller 端,我想将任何类型的用户放入列表中。我没有展示模型,因为我认为这不是必需的。主要问题是如何在 BuyerModel 中获取对象列表中的#inputBuyerRow 输入? #addBuyer 按钮在代码中添加更多#inputBuyerRow 元素。会有更多的用户。

我该怎么做。我必须输入组还是其他什么?我没有找到任何例子。

我的约束是:

编辑:在控制器中,我尝试使用字符串数组和模型获取输入,以了解视图如何发送给我。所以也不要与这段代码混淆。我只是在尝试。没什么特别的。

一般在MVC应用中,提交表单时,在action方法中,会通过html元素的name属性获取数据。 您可以通过名称从视图到控制器访问表单字段

在视图中

要传输字符串数组,元素应使用相同的名称属性。像这样:name="DeliveryUserMail"

<div id="DeliveryInputArea" class="col-lg-12">
            <div id="DeliverySignerRow">
                <div class="input-group mb-3">
                    <input type="text" name="DeliveryUserMail" class="form-control m-input col" placeholder="Mail" autocomplete="off">
                    <input type="text" name="DeliveryUserMail" class="form-control m-input col" placeholder="Mail" autocomplete="off">
                    <div class="input-group-append">
                        <button id="removeRow" type="button" class="btn btn-danger">Kaldır</button>
                    </div>
                </div>
            </div>

要发送模型列表,我们应该根据列表索引设置name属性,像这样:BuyersModel[0].BuyerUserName

 <div class="input-group mb-3">
                    <input type="text" name="BuyersModel[0].BuyerUserName" class="form-control m-input col" placeholder="İsim" autocomplete="off">
                    <input type="text" name="BuyersModel[0].BuyerUserLastName" class="form-control m-input col" placeholder="Soyisim" autocomplete="off">
                    <input type="text" name="BuyersModel[0].BuyerUserMail" class="form-control m-input col" placeholder="E-Posta" autocomplete="off">
                    </div >
                    <div class="input-group mb-3">
                    <input type="text" name="BuyersModel[1].BuyerUserName" class="form-control m-input col" placeholder="İsim" autocomplete="off">
                    <input type="text" name="BuyersModel[1].BuyerUserLastName" class="form-control m-input col" placeholder="Soyisim" autocomplete="off">
                    <input type="text" name="BuyersModel[1].BuyerUserMail" class="form-control m-input col" placeholder="E-Posta" autocomplete="off">
                    </div >

在控制器中

[HttpPost]
    public ActionResult Create2(string[] DeliveryUserMail, List<BuyerUsers> BuyersModel)
    {
        //Access string, list here
     }

结果是这样的: