Asp.net 如何将模型的多个实例以表单形式传递给控制器

Asp.net 如何将模型的多个实例以表单形式传递给控制器,asp.net,Asp.net,我正在建立一个asp.net表单,它收集5台发电机的读数 这是每个发电机的型号 public class GeneratorModel { public int Id { get; set; } public String Name { get; set; } public float Belasting { get; set; } public float MaxBelasting { get; set; } public float KoudeRes

我正在建立一个asp.net表单,它收集5台发电机的读数

这是每个发电机的型号

 public class GeneratorModel
{
    public int Id { get; set; }
    public String Name { get; set; }
    public float Belasting { get; set; }
    public float MaxBelasting { get; set; }
    public float KoudeReserve { get; set; }
}
这是我目前的看法

@model XX.Models.GeneratorModel
@{
ViewBag.Title = "Data Entry";
}

@using (Html.BeginForm("Index", "DataEntry", FormMethod.Post))
{
<table>
    <tr>Generator 1</tr>
    <tr>
        <td>Enter Belasting: </td>
        <td>@Html.TextBoxFor(m => m.Belasting)</td>
    </tr>
    <tr>
        <td>Enter Max Belasting: </td>
        <td>@Html.TextBoxFor(m => m.MaxBelasting)</td>
    </tr>
    <tr>
        <td>Koude Reserve: </td>
        <td>@Html.TextBoxFor(m => m.KoudeReserve)</td>
    </tr>
    <tr>
        <td colspan="2"><input type="submit" value="Submit Form" /></td>
    </tr>
</table>
}
目前我只能输入1个生成器的值,但我需要读取5个生成器的读数

有没有办法在控制器操作结果中获取GeneratorModel对象数组作为参数?

您可以这样尝试:

    <table class="col-md-offset-2 table table-bordered">
        <thead>
            <tr>
               <th>Name</th>
               <th>Belasting</th>
               <th>Max Belasting</th>                        
               <th>Koude Reserve</th>
               <th></th>
            </tr>
        </thead>
        <tbody id="GenaratorList">
            <tr>
               <td>@Html.TextBoxFor(m => m.Name)</td>
               <td>@Html.TextBoxFor(m => m.Belasting)</td>
               <td>@Html.TextBoxFor(m => m.MaxBelasting)</td>
               <td>@Html.TextBoxFor(m => m.KoudeReserve)</td>                        
               <td><input type="button" value="Add" onclick="addGenarator()"/></td>
            </tr>        
         </tbody>        
    </table>
    <input type="submit" value="Submit Form" />
然后添加一些javascript,以便在每次单击“添加”时追加新行,并仅在添加了Generator所需的行数后单击“提交”。 将控制器更改为:

[HttpPost]
public ActionResult Index(List<GeneratorModel> generatorModels)
{
   return Content("Hello");
}
以及用于追加新表行的JS:

<script>
count=0;
function addGenarator() {
    var name = $('#Manifest_Quantity').val();
    var belasting= $('#Belasting').val();
    var mxBelasting= $('#MaxBelasting').val()
    var reserve= $('#KoudeReserve').val();

    var generator= "generatorModels[" + count + "]";
            $('#GenaratorList').append('<tr><td><input id="' + generator + '.Name" name="' + generator + '.Name" type="text" class="form-control" readonly value="' + name + '"></td><td><input id="' + generator + '.Belasting" name="' + generator + '.Belasting" type="text" class="form-control" readonly value="' + belasting + '"></td><td><input id="' + generator + '.MaxBelasting" name="' + generator + '.MaxBelasting" type="text" class="form-control" readonly value="' + mxBelasting + '"></td><td><input id="' + generator + '.KoudeReserve" name="' + generator + '.KoudeReserve" type="text" class="form-control" readonly value="' + reserve + '"></td></tr>');
            $('#Name,#Belasting,#MaxBelasting,#KoudeReserve').val('');    
            count++;    
        }    
</script>
您可以这样尝试:

    <table class="col-md-offset-2 table table-bordered">
        <thead>
            <tr>
               <th>Name</th>
               <th>Belasting</th>
               <th>Max Belasting</th>                        
               <th>Koude Reserve</th>
               <th></th>
            </tr>
        </thead>
        <tbody id="GenaratorList">
            <tr>
               <td>@Html.TextBoxFor(m => m.Name)</td>
               <td>@Html.TextBoxFor(m => m.Belasting)</td>
               <td>@Html.TextBoxFor(m => m.MaxBelasting)</td>
               <td>@Html.TextBoxFor(m => m.KoudeReserve)</td>                        
               <td><input type="button" value="Add" onclick="addGenarator()"/></td>
            </tr>        
         </tbody>        
    </table>
    <input type="submit" value="Submit Form" />
然后添加一些javascript,以便在每次单击“添加”时追加新行,并仅在添加了Generator所需的行数后单击“提交”。 将控制器更改为:

[HttpPost]
public ActionResult Index(List<GeneratorModel> generatorModels)
{
   return Content("Hello");
}
以及用于追加新表行的JS:

<script>
count=0;
function addGenarator() {
    var name = $('#Manifest_Quantity').val();
    var belasting= $('#Belasting').val();
    var mxBelasting= $('#MaxBelasting').val()
    var reserve= $('#KoudeReserve').val();

    var generator= "generatorModels[" + count + "]";
            $('#GenaratorList').append('<tr><td><input id="' + generator + '.Name" name="' + generator + '.Name" type="text" class="form-control" readonly value="' + name + '"></td><td><input id="' + generator + '.Belasting" name="' + generator + '.Belasting" type="text" class="form-control" readonly value="' + belasting + '"></td><td><input id="' + generator + '.MaxBelasting" name="' + generator + '.MaxBelasting" type="text" class="form-control" readonly value="' + mxBelasting + '"></td><td><input id="' + generator + '.KoudeReserve" name="' + generator + '.KoudeReserve" type="text" class="form-control" readonly value="' + reserve + '"></td></tr>');
            $('#Name,#Belasting,#MaxBelasting,#KoudeReserve').val('');    
            count++;    
        }    
</script>

如果您明天需要读取6台发电机或7台发电机的读数,该怎么办?您是否会继续为每个新生成器在同一页上添加输入字段?理想情况下,您应该有一个包含表中所有生成器的页面,并且每个表行都应该有编辑和删除按钮。在表格的顶部应该有一个创建按钮,它会将您重定向到一个新的生成器窗体,您可以从该窗体创建一个新的生成器。如果您明天需要读取6个生成器或7个生成器,该怎么办?您是否会继续为每个新生成器在同一页上添加输入字段?理想情况下,您应该有一个包含表中所有生成器的页面,并且每个表行都应该有编辑和删除按钮。在表的顶部应该有一个create按钮,它会将您重定向到一个新的生成器窗体,您可以从该窗体创建一个新的生成器