Asp.net mvc 从具有可变输入数的表单传递数据-MVC 5

Asp.net mvc 从具有可变输入数的表单传递数据-MVC 5,asp.net-mvc,forms,asp.net-mvc-5,asp.net-mvc-viewmodel,Asp.net Mvc,Forms,Asp.net Mvc 5,Asp.net Mvc Viewmodel,我一直在这里寻找类似的问题,但仍然找不到解决问题的方法 我有一个包含一些文本和表单的页面,它们共享相同的ViewModel,如下所示: public class MyViewModel { public IEnumerable<WordingB> WordingBs { get; set; } public IEnumerable<WordingC> WordingCs { get; set; } public IEnumerable<Quest

我一直在这里寻找类似的问题,但仍然找不到解决问题的方法

我有一个包含一些文本和表单的页面,它们共享相同的ViewModel,如下所示:

public class MyViewModel
 {
   public IEnumerable<WordingB> WordingBs { get; set; }
   public IEnumerable<WordingC> WordingCs { get; set; }
   public IEnumerable<Question> Questions { get; set; } 
}
这是有问题的一页:

@model MyProject.ViewModels.MyViewModel   

<div class="col-md-6 masonry listview-block">
    @foreach (var wording in Model.WordingBs)
    {
        <div class="block">                
            <p>@Html.Raw(@wording.EOW)</p>
        </div>
    }
    @foreach (var wording in Model.WordingCs)
    {
        <div class="block">              
            <p>@Html.Raw(@wording.EOW)</p>
        </div>
    }

</div>


@using (Ajax.BeginForm("Routing", "Partials", new AjaxOptions { UpdateTargetId = "Target", LoadingElementId = "spinner", HttpMethod = "POST", InsertionMode = InsertionMode.Replace }))
{


            <div id="quick-post" class="block-body form-validation">
                @foreach (var question in Model.Questions)
                {
                    <div class="form-group">
                        <label for="QuestionText">@question.QuestionText</label>
                        <input type="text" class="form-control input-sm input-sm" name="Answer">
                    </div>
                }
                <div class="form-group">
                    <label for="postcode">PostCode</label>
                    <input type="text" class="form-control input-sm validate[required] input-sm" name="postcode" value=@Request.QueryString["postcode"]>

                </div>

                <div class="form-group">
                    <label>Loss Description</label>
                    <textarea></textarea>
                </div>

                <input type="submit" class="btn btn-primary btn-xs" value="Route">

            </div>

        </div>
    </div>

}

我现在面临的问题是将数据从表单传递到控制器。就我而言,表格可以有0到30或40个问题!我觉得我已经达到了知识的极限,我非常需要建议。

您应该创建一个绑定到视图中ViewModel的回发方法,以便MVC框架为您返回模型数据

这个方法看起来像这样

[Post]
public ActionResult EOW(MyViewModel viewModel)
    {
       //Do something  
        return View();
    }

首先使用Html助手

@{int i = 0;}
@foreach (var question in Model.Questions)
            {
                <div class="form-group">
                    <label for="QuestionText">@question.QuestionText</label>
                    <input type="text" class="form-control input-sm input-sm" name="Answer[i]">
                </div>
i++;
            }
和视图模型

public class Question
{           
    public string QuestionText { get; set; }
    public IEnumerable<string> Answer {get; set;}
}
阅读本教程


在cosset和Derek的帮助下,我找到了一个解决办法,如下所示:

public class MyViewModel
 {
   public IEnumerable<WordingB> WordingBs { get; set; }
   public IEnumerable<WordingC> WordingCs { get; set; }
   public IEnumerable<Question> Questions { get; set; } 
}
1我给我的输入元素命名如下:

<input type="text" name="Answer">
我不需要像在其中一个答案上建议的那样使用Answer[I]进行迭代,因为框架会自动将具有相同名称的所有输入绑定到一个列表元素中,我的方法可以将其作为参数。像这样:

public ActionResult Routing(List<string> Answer){} 
2我还需要在我的路由方法中使用标签标签的值,但我不知道该怎么做。Cosset再次建议我使用一个隐藏字段,并给它一个标签文本的值。这很有效

<label for="Answer">@question.QuestionText</label>
<input type="hidden" name="QuestionText" value=@question.QuestionText />
现在的方法如下所示:

public ActionResult Routing(List<string> Answer, List<string> QuestionText){} 
现在我得到了我需要的东西。将所有数据从我的表单传递到控制器,包括标签和输入,而不必担心MyViewModel


为了学习,我很想知道是否还有其他方法可以达到这一目的。

可能重复您的问题到底是什么?你想解决的问题是什么?嗨,对不起,我不太清楚。我想要实现的是将表单中的所有内容(包括标签和文本区域)重新显示在另一个页面中。我无法在浏览器端执行此操作,因为需要根据我的数据库检查数据。正如你所看到的,我也有很多问题,非常感谢你,它实际上为我指明了正确的方向。我现在面临的问题是将标签的值传递给控制器!如果您能提供帮助,我将非常感谢。在每个标签隐藏字段下添加。此字段的值应等于标签文本。再次,我面临标签文本问题。正如我之前提到的,标签上的问题是从数据库中提取的,我不知道我的表单将有多少问题,因此需要从模型中提取隐藏字段的值,如下所示:但是,只有字符串的第一个字被传递给控制器!你知道如何让整个字符串以循环的方式通过吗
public ActionResult Routing(List<string> Answer, List<string> QuestionText){}