Asp.net mvc 从具有可变输入数的表单传递数据-MVC 5
我一直在这里寻找类似的问题,但仍然找不到解决问题的方法 我有一个包含一些文本和表单的页面,它们共享相同的ViewModel,如下所示: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
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){}