2014-09-04 30 views
0

我一直在寻找类似的问题在这里,但仍然找不到解决我的问题。从可变数量输入的表单传递数据 - MVC 5

我有一个包含一些文本和表格,他们都共享同一个视图模型如下页面:

public class MyViewModel 
{ 
    public IEnumerable<WordingB> WordingBs { get; set; } 
    public IEnumerable<WordingC> WordingCs { get; set; } 
    public IEnumerable<Question> Questions { get; set; } 
} 

下面是关于WordingB,WordingC和问题多一点细节:

public class WordingB 
    {   
     public string EOW { get; set; } 
    } 



public class WordingC 
    {   
     public string EOW { get; set; } 
    } 




public class Question 
    {   
     public string QuestionText { get; set; } 
     public string Answer {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" [email protected]["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> 

} 

这个想法是,一些管理员是一个可以向表单添加问题。 (问题存储在表中)有一个控制器使用MyViewModel并将我需要的模型返回给视图。

public ActionResult EOW() 
     { 
      QuestionsandWording viewModel = new QuestionsandWording(); 

      viewModel.Questions = // first query 

      viewModel.WordingBs = // second query 

      viewModel.WordingCs = // third query 

      return View(viewModel); 
     } 

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

+0

[ASP.NET MVC窗体处理未知数量的输入]的可能重复(http://stackoverflow.com/questions/4389214/asp-net-mvc-form-handling-unknown-number-of-puts) – 2014-09-04 19:10:31

+0

你到底在问什么?你试图解决什么问题? – 2014-09-05 00:46:11

+0

嗨,不好意思。我想要实现的是将我的表单中的所有内容(包括标签和textareas)以及在其他页面中重新显示它们。我无法在浏览器端执行此操作,因为数据需要根据我的数据库进行检查。 正如你所看到的,我有不同数量的问题(因此也有问题)。 – Ouanixi 2014-09-05 12:19:31

回答

5

随着宠儿和德里克的帮助下,我设法找到一个解决方法如下:

1)我出了名的,以我的投入要素是这样的:

<input type="text" name="Answer"> 

我不需要按照其中一个答案的建议来迭代Answer [i],因为框架会自动将具有相同名称的所有输入绑定到我的方法可以用作参数的List元素中。就像这样:

public ActionResult Routing(List<string> Answer){} 

2)我还需要使用我的标签标签的价值在我的路由方法和根本不知道如何做到这一点。同样,Cosset建议我使用隐藏字段并给它赋予标签文本的值。这工作完美。

<label for="Answer">@question.QuestionText</label> 
<input type="hidden" name="QuestionText" [email protected] /> 

而且方法现在看起来是这样的:

public ActionResult Routing(List<string> Answer, List<string> QuestionText){} 

现在我已经得到了我所需要的。将所有数据从表单传递到控制器(标签和输入),而不必担心MyViewModel。

为了学习,我很想知道是否有任何其他方式来实现这一点。

1

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

的方法会是这个样子

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

在第一次使用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;} 
} 

而且阅读本教程

1 2 3

+0

非常感谢,因为它确实指出了我的正确方向。 我现在面临的问题是将我的标签的价值传递给我的控制器!如果你能提供帮助,我会非常感激。 – Ouanixi 2014-09-05 12:22:51

+0

在每个标签下添加隐藏字段。此字段的值应与标签文本相同 – cosset 2014-09-05 12:36:09

+0

您是明星,非常感谢您的帮助。 – Ouanixi 2014-09-05 13:05:18

相关问题