2016-09-21 1 views
0

J'ai raté une petite chose en passant une liste de la vue au contrôleur. Il affiche null dans la méthode [HttpPost] du contrôleur. N'importe qui guide s'il vous plaît comment je peux obtenir des données de liste de la vue au contrôleur. S'il vous plaît voir mon code complet ci-dessous.Comment passer Liste de la vue au contrôleur - MVC 4

@model List<payorder_draft_printing.Models.registration> 

@{ 
    ViewBag.Title = "bulk_approval"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

<div class="container"> 

    <div class="row" style="text-align: left"> 

     <h2><u>Bulk Approval</u></h2> 

     <br /> 
     <br /> 

     @using (Html.BeginForm("bulk_approval", "Sms", FormMethod.Post, new { enctype = "multipart/form-data" })) 
     { 
      <div style="width: 700px;" align="center"> 

       <table id="GetSerial" class="table"> 
        <thead> 
         <tr class="ui-widget-header"> 
          <th>Account Number</th> 
          <th>Mobile Number</th> 
          <th>Customer Name</th> 
          <th>Branch Code</th> 
          <th>Bulk Upload</th> 
          <th>Create Date</th> 
          <th>Created By</th> 
          <th>Active</th> 
          </tr> 
        </thead> 

        <tbody> 

         @if (Model != null) 
         { 
          foreach (var m in Model) 
          { 
          <tr style="height: 25px; border-bottom: 1px solid gray"> 
           <td style="min-width: 120px">@m.account_number</td> 
           <td style="min-width: 120px; width: 450px;">@m.mobile_number</td> 
           <td style="min-width: 250px; width: 250px">@m.customer_name</td> 
           <td style="min-width: 100px; width: 100px">@m.BranchCode</td> 
           <td style="min-width: 100px; width: 100px">@m.BulkUpload</td> 
           <td style="min-width: 150px;">@string.Format("{0:dd-MMM-yyyy}", @m.create_date)</td> 
           <td style="min-width: 100px;">@m.created_by</td> 
           <td style="min-width: 100px; width: 100px">@m.Active</td> 
          </tr> 
          } 
         } 

        </tbody> 

       </table> 
       <input type="submit" value="Update" /> 
      </div> 
     } 

    </div> 

</div> 

Dans le code suivant je suis en train d'obtenir la liste soumise à la vue au contrôleur, mais le résultat est nul.

[HttpPost] 
      public ActionResult bulk_approval(List<registration> model)//here my model shows null, please guide. 
      { 
       foreach (var abc in model) 
       { 

       } 
       return View(); 
      } 

Voici ma classe. Avec une boucle foreach

public class registration 
{ 
    public int Id { get; set; } 
    public string mobile_number { get; set; } 
    public string account_number { get; set; } 
    public string customer_name { get; set; } 
    public int FrequencyId { get; set; } 
    public bool Active { get; set; } 
    public string BranchCode { get; set; } 
    public bool BulkUpload { get; set; } 
    public string created_by { get; set; } 
    public DateTime create_date { get; set; } 
} 
+0

Utilisez l'indexation ('boucle for') au lieu d'une boucle' foreach' – devqon

+0

Pouvez-vous s'il vous plaît partager exemple de code , Merci. –

+0

Copie possible de [Table HTML vers ADO.NET DataTable] (http://stackoverflow.com/questions/30094047/html-table-to-ado-net-datatable) –

Répondre

1

, MVC crée simplement les mêmes entrées encore et encore, parce qu'il ne sait pas qu'ils devraient être différents. Par conséquent, vous devez utiliser for -loops et utiliser des index. Je ne vois pas d'entrées dans votre forme, donc je vais vous donner un exemple:

@if (Model != null) { 
    for (var i = 0; i < Model.Count; i++) { 
     @Html.TextBoxFor(m => Model[i].SomeProperty) 
    } 
} 

De plus, si je me souviens bien, vous devez utiliser un IList comme modèle:

@model IList<payorder_draft_printing.Models.registration> 

pour pouvoir poster vos (non modifiables) textes, vous devez ajouter des entrées cachées:

@Model[i].account_number 
@Html.HiddenFor(m => Model[i].account_number) 
+0

Merci pour votre clarification Maintenant, je reçois des valeurs correctement. Maintenant Comment puis-je afficher les valeurs sous forme d'étiquette au lieu de textbox , parce que vous avez utilisé @ Html.TextBoxFor dans votre code, merci –

+2

Pourquoi voudriez-vous poster des choses qui ne sont même pas éditables? Si vous n'avez pas d'entrées, l'idée d'un formulaire s'estompe – devqon

+0

vous avez raison, En fait, mon scénario est que j'ai seulement besoin d'être éditable la dernière colonne [Status] Valeur booléenne soit vrai ou faux, et le reste des colonnes devrait être juste afficher comme étiquette, S'il vous plaît guider comment le faire, merci. –