2017-08-24 2 views
0

j'ai une action dans mon EmployeeController commeASP.NET MVC Cant Get Listed données de la vue au contrôleur

public ActionResult approvalList() 
     { 
      int sessionUser = Convert.ToInt32(Session["LogedUserID"]); 
      var listForApproval = db.TblExpenseItem.Where(k => k.UserID.Equals(sessionUser)); 

      return View(listForApproval.ToList()); 
     } 

i ajouté une vue avec le modèle "Liste" et classe modèle "tableFromMyDB". (I mis @ en utilisant (Html.BeginForm) et le bouton d'envoi moi-même.)

@model IEnumerable<ExpenseApplication.Models.TblExpenseItem> 

@{ 
    ViewBag.Title = "approvalList"; 
} 

<h2>approvalList</h2> 

<p> 
    @Html.ActionLink("Create New Expense", "ExpenseReport", "Employee") 
</p> 
@using (Html.BeginForm("approvalList", "Employee", FormMethod.Post)) 
{ 
    <table class="table"> 
     <tr> 
      <th> 
       @Html.DisplayNameFor(model => model.ExpenseDate) 
      </th> 
      <th> 
       @Html.DisplayNameFor(model => model.Description) 
      </th> 
      <th> 
       @Html.DisplayNameFor(model => model.Amount) 
      </th> 
      <th> 
       @Html.DisplayNameFor(model => model.isSended) 
      </th> 
      <th> 
       @Html.DisplayNameFor(model => model.isRejected) 
      </th> 
      <th> 
       @Html.DisplayNameFor(model => model.TblCategory.CtgName) 
      </th> 
      <th> 
       @Html.DisplayNameFor(model => model.TblUsers.UserName) 
      </th> 
      <th></th> 
     </tr> 

     @foreach (var item in Model) 
     { 
      if (item.isSended == false) 
      { 
      <tr> 
       <td> 
        @Html.DisplayFor(modelItem => item.ExpenseDate) 
       </td> 
       <td> 
        @Html.DisplayFor(modelItem => item.Description) 
       </td> 
       <td> 
        @Html.DisplayFor(modelItem => item.Amount) 
       </td> 
       <td> 
        @Html.DisplayFor(modelItem => item.isSended) 
       </td> 
       <td> 
        @Html.DisplayFor(modelItem => item.isRejected) 
       </td> 
       <td> 
        @Html.DisplayFor(modelItem => item.TblCategory.CtgName) 
       </td> 
       <td> 
        @Html.DisplayFor(modelItem => item.TblUsers.UserName) 
       </td> 
       <td> 
        @Html.ActionLink("Edit", "Edit", new { id = item.ExpItemID }) | 
        @Html.ActionLink("Details", "Details", new { id = item.ExpItemID }) | 
        @Html.ActionLink("Delete", "Delete", new { id = item.ExpItemID }) 
       </td> 
      </tr> 
      } 
     } 
     <tr> 
      <td></td> 
      <td></td> 
      <td></td> 
      <td></td> 
      <td></td> 
      <td></td> 
      <th>Total Amount:</th> 
      <td> 
       @Model.Sum(x => x.Amount) 
      </td> 
     </tr> 

    </table> 
    <div class="col-md-offset-8 col-md-12"> 
     <input type="submit" value="Send List To Manager" class="btn btn-default" /> 
    </div> 
} 

l'action HttpPost dans mon contrôleur. Lorsque j'appuie sur le bouton "Soumettre", cela lance nullReferenceException sur expItemList.
J'ai fait ma recherche et trouvé des solutions.Mais ils ont tous sur créer, éditer etc ..
Je veux juste la liste pour voir ce qui est dans ma table, puis juste le soumettre.Après cela, je vais obtenir des données avec foreach de expItemList.
btw je suis nouveau à MVC et c'est ma première question là, donc je suis désolé si j'ai fait une erreur.

+1

Pourquoi envoyez-vous le formulaire si l'utilisateur ne modifie pas ou n'ajoute pas à cette liste. Votre code actuel consiste simplement à imprimer les valeurs à l'écran. Il n'y a pas d'éléments de formulaire d'entrée! – Shyju

+0

Je vais changer une valeur comme isSended, isRejected après que l'utilisateur l'a soumis et je mettrai à jour la table avec de nouvelles valeurs. –

+0

Où changez-vous? Est-ce l'utilisateur qui le change dans l'interface utilisateur? alors vous avez besoin d'éléments de formulaire d'entrée pour cela (vous ne les avez pas maintenant). Si c'est dans le code du serveur, je suggère de le lire de nouveau à partir de la base de données (de la même façon que vous lisez dans l'action GET) et de mettre à jour au besoin. – Shyju

Répondre

1

Html.DisplayFor restitue les données, mais ne les transmet pas au contrôleur lors de l'envoi. Si vous souhaitez que les données soient conservées et renvoyées, vous pouvez utiliser un Html.EditorFor et utiliser le htmlAttributes pour désactiver le composant ou utiliser la méthode Html.DisplayFor et l'associer à un Html.HiddenFor qui stockera la valeur à soumettre.

+0

J'ai essayé 'Html.EditorFor' au lieu de' Html.DisplayFor' mais j'ai encore une fois la propriété nullReferenceException. Et j'ai essayé 'Html.DisplayFor' avec' Html.HiddenFor' mais encore la même erreur. @Daniel –

+1

@MelihDurak. Lis la dupe que je t'ai donnée! –