2012-12-13 2 views
0

Je suis dans un projet MVC et suis actuellement coincé avec le mappage plusieurs-à-plusieurs.ASP.NET MVC - Utilisation de cases à cocher pour mettre à jour plusieurs à plusieurs relations

J'ai une relation de plusieurs à plusieurs. Il modélise une sélection de cours pour étudiants dans une université. Un étudiant a des sujets et pour le semestre donné il y a une liste complète de sujets. Besoin: faire un formulaire pour qu'un étudiant puisse visiter la page et utiliser des cases à cocher pour sélectionner certains sujets. J'ai créé un View Modle (au moins c'est ce que je l'appelle). C'est le modèle qui sera utilisé dans la vue 'Modifier'.

Edit.cshtml

//in the Edit View 
@model StudentViewModel 

//Some more code 
@Html.EditorFor(model => model.Std.Name) 
//etc.. 

La vue étudiant modèle

class StudentViewModel 
{ 
public Student Std { get; set; } 
public List<SubjectsSelection> Subs{ get; set; } 
} 

class SubjectSelection 
{ 
public string Name { get; set; } 
public int ID { get; set; } 
public bool Selected { get; set; } 
} 

Ce que je veux est d'ajouter un ensemble de cases à cocher pour chaque sujet tel que Selected = true seront vérifiés.

Je prévoyais de créer une liste de cases à cocher à travers une boucle for manuellement.

Puis-je faire avec quelque chose de similaire pour @Html.EditorFor(model => model.Subs) de sorte que lorsque le formulaire est soumis, je peux utiliser un contrôleur comme celui-ci

[HttpPost] 
public ActionResult Edit(Machine machine, SubjectSelection[] subs) 
{ 
//Some code here 
} 

Alors que là après je serai en mesure de faire les connexions nécessaires (à moins heureusement) et enregistrer dans la base de données.

Répondre

0

Sample Pour montrer comment vous pouvez publier des données au contrôleur Méthode

Code de Razor:

<div id="form"> 
     <table width="600"> 
      <tr> 
       <td>Select Date:</td> 
       <td> 
        <input class="txtDate" type="date" size="20"></td> 
      </tr> 
      <tr> 
       <td>Select Expense Type:</td> 
       <td> 
        <select class="ExpenseType"> 
         <optgroup label="Room"> 
          <option>Room Fare</option> 
         </optgroup> 

         <optgroup label="Mess"> 
          <option>Monthly Mess</option> 
         </optgroup> 

         <optgroup label="Others"> 
          <option>Bus Fare</option> 
          <option>Tapari</option> 
          <option>Mobile Recharge</option> 
          <option>Auto</option> 
         </optgroup> 
        </select></td> 
      </tr> 
      <tr> 
       <td>Enter Cost:</td> 
       <td> 
        <input class="cost" type="text" size="45" /></td> 
      </tr> 
      <tr> 
       <td>Extra Details:</td> 
       <td> 
        <input class="extra" type="text" size="45" /></td> 
      </tr> 
      <tr> 
       <td>&nbsp;</td> 
       <td> 
        <button href="javascript:void(0);" onClick="saveExpense();" >Submit</button></td> 
      </tr> 
     </table> 
    </div> 

<script> 
function saveExpense() 
    { 
     var expenseobject = {   //MyModel Expense has these fields 
      date:$('.txtDate').val() , 
      type:$('.ExpenseType').val() , 
      cost: $('.cost').val(), 
      extra:$('.extra').val() 

     }; 

     $.ajax({ 
      url: './saveexpense', 
      type: 'POST', 
      contentType: 'application/json', 
      data: JSON.stringify({ obj: expenseobject }), 
      success: function (result) { 
       handleData(result); 

      } 
     }); 

    } 
</script> 

Controller:

public ActionResult SaveExpense(Expense obj) 
     { 
      obj.ExpenseId = Guid.NewGuid(); 
      if (ModelState.IsValid) 
      { 
       context.expenses.Add(obj); 
       context.SaveChanges(); 
       int total=context.expenses.Sum(x => x.cost); 
       return Json(new {spent=total,status="Saved" }); 

      } 
      else 
       return Json(new { status="Error"}); 
     } 

Au lieu de faire l'objet du Model, vous pouvez effectuer les opérations suivantes:

Vous pouvez directement serialize() le formulaire en utilisant jquery et afficher les données au contrôleur ... et vous fait

+0

Je suis en fait très nouveau à ASP.NET, pourriez-vous me donner un peu plus d'informations. –

+0

Il m'a fallu quelques jours pour comprendre cette approche! Merci pour l'info! –

Questions connexes