2014-09-04 36 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

相關問題