2015-12-23 4 views
0

Y a-t-il un moyen de transmettre des données du contrôleur au modèle? Le scénario de mon projet est qu'il a deux tables dans la base de données, et dans View il y a deux zones de texte, les données d'une zone de texte sont sauvegardées dans une table tandis que les données d'une autre table sont sauvegardées dans une autre table, Je veux montrer les données des deux tables dans une autre vue unique. pour cette raison, je veux envoyer les deux valeurs de la zone de texte du contrôleur au modèle, puis je veux montrer les données de ce modèle à la vue. quelqu'un peut-il s'il vous plaît aider comment puis-je l'implémenter?Transmettre des données du contrôleur au modèle dans MVC 3

+0

En savoir plus sur le concept «ViewModel» dans MVC - http://sampathloku.blogspot.in/2012/10/how-to-use-viewmodel-with-aspnet-mvc.html – ramiramilu

+0

@ramiramilu mais que faire si nous avons le nombre des lignes dans la base de données que nous voulons envoyer au modèle? afin que nous puissions le montrer dans notre vue? –

+0

rend IEnumerable de votre ViewModel et l'utilise sur View. – ramiramilu

Répondre

1

Vous devez créer un modèle de vue et l'utiliser. Les modèles de vue sont de simples classes POCO spécifiques à la vue.

public class CustomerInfo 
{ 
    public string Name {set;get;} 
    public string AddressLine {set;get;} 
} 

Et dans votre action GET, vous pouvez créer un objet de cela, lire les données à partir de 2 tables et définir les valeurs de propriété de notre modèle de vue et d'envoyer à la vue

public ActionResult View(int id) 
{ 
    var vm = new CustomerInfo(); 
    var db=new YourDbContext(); 

    var customer=db.GetCustomer(id); // read from first table 
    var address=db.GetAddress(id); // read from second table 
    vm.Name = customer.FirstName; 
    vm.AdddressLine = address.AddressLine1; 
    return View(vm); 
} 

Et votre vue sera fortement typé à ce point de vue modèle

@model CustomerInfo 
<h2>@Model.Name</h2> 
<h3>@Model.AddressLine1</h3> 

Si vous essayez d'enregistrer ces informations aux tables db, vous pouvez avoir une forme dans votre vue

@model CustomerInfo 
@using(Html.BeginForm("Edit","Home")) 
{ 
<label>Name</label> @Html.TextBoxFor(f=>f.Name) 
<label>Name</label> @Html.TextBoxFor(f=>f.AddressLine) 
<input type="submit" /> 
} 

et dans votre action HttpPost

[HttpPost] 
public ActionResult Edit(CustomerInfo model) 
{ 
    // read the values from model and save to 2 tables 
    var c=new Customer { FirstName=model.Name}; 
    var a=new Address{ AddressLine1=model.AddressLine}; 

    var db=new YourDbContext(); 
    db.Customers.Add(c); 
    db.Addresses.Add(a); 
    db.SaveChanges(); 
    return RedirecToAction("Success"); 
} 

Si vous souhaitez enregistrer une collection d'articles, vous pouvez consulter this answer ou this.