Comment faire des calculs simples à l'aide des éléments de modèle, et une entrée à partir d'un formulaire en ASP.net MVC 3?
Je suis nouveau dans la programmation et la ASP.net MVC 3, donc ne soyez pas surpris par mon manque de connaissance sur ce.. Bon, je veux multiplier deux chiffres après la virgule, Une virgule vient de la forme que l'utilisateur remplit et l'autre virgule vient de la classe du Modèle (l'obtient à partir de la base de données).
J'ai deux classes du Modèle, appelé TAUX d' & PROJECTMATERIAL . Le TAUX de la classe a un élément appelé Montant qui indique le montant du Taux et de la PROJECTMATERIAL classe a un élément quantité. Les classes sont liées et je veux être en mesure de dire variable1 = quantité*Prix.montant et retour variable1 mon Index, Supprimer, Détails vues. Je ne veux pas stocker variable1 à ma base de données mais je veux juste afficher dans mon point de vue.....mais je ne sais pas comment et où le faire
Code à partir de matières de la classe..
public class ProjectMaterial
{
public int ProjectMaterialID { get; set; }
[Required]
[Display(Name = "Scope Name")]
public int? ScopeID { get; set; }
[Required]
[Display(Name = "Rate Code")]
public int? RateID { get; set; }
[Required]
[Display(Name = "Quantity")]
public decimal Quantity { get; set; }
public virtual Scope Scopes { get; set; }
public virtual Rate Rates { get; set; }
}
Code de la portée de la classe..
public class Rate
{
public int RateID { get; set; }
[Required]
[Display(Name = "Rate Code")]
public int RateCode { get; set; }
[Required]
[Display(Name = "Unit")]
public string Unit { get; set; }
[Required]
[Display(Name = "Description")]
public string Description { get; set; }
[Required]
[Display(Name = "Amount")]
public decimal Amount { get; set; }
public virtual ICollection<ProjectMaterial> ProjectMaterials { get; set; }
}
Code de contrôleur de projet de classe...
public class ProjectMaterialController : Controller
{
private ContructorContext db = new ContructorContext();
//
//GET: /ProjectMaterial/
public ViewResult Index()
{
var projectmaterials = db.ProjectMaterials.Include(p => p.Scopes).Include(p => p.Rates);
return View(projectmaterials.ToList());
}
//
//GET: /ProjectMaterial/Details/5
public ViewResult Details(int id)
{
ProjectMaterial projectmaterial = db.ProjectMaterials.Find(id);
return View(projectmaterial);
}
//
//GET: /ProjectMaterial/Create
public ActionResult Create()
{
ViewBag.ScopeID = new SelectList(db.Scopes, "ScopeID", "ScopeName");
ViewBag.RateID = new SelectList(db.Rates, "RateID", "Unit");
return View();
}
//
//POST: /ProjectMaterial/Create
[HttpPost]
public ActionResult Create(ProjectMaterial projectmaterial)
{
if (ModelState.IsValid)
{
db.ProjectMaterials.Add(projectmaterial);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.ScopeID = new SelectList(db.Scopes, "ScopeID", "ScopeName", projectmaterial.ScopeID);
ViewBag.RateID = new SelectList(db.Rates, "RateID", "Unit", projectmaterial.RateID);
return View(projectmaterial);
}
//
//GET: /ProjectMaterial/Edit/5
public ActionResult Edit(int id)
{
ProjectMaterial projectmaterial = db.ProjectMaterials.Find(id);
ViewBag.ScopeID = new SelectList(db.Scopes, "ScopeID", "ScopeName", projectmaterial.ScopeID);
ViewBag.RateID = new SelectList(db.Rates, "RateID", "Unit", projectmaterial.RateID);
return View(projectmaterial);
}
//
//POST: /ProjectMaterial/Edit/5
[HttpPost]
public ActionResult Edit(ProjectMaterial projectmaterial)
{
if (ModelState.IsValid)
{
db.Entry(projectmaterial).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.ScopeID = new SelectList(db.Scopes, "ScopeID", "ScopeName", projectmaterial.ScopeID);
ViewBag.RateID = new SelectList(db.Rates, "RateID", "Unit", projectmaterial.RateID);
return View(projectmaterial);
}
//
//GET: /ProjectMaterial/Delete/5
public ActionResult Delete(int id)
{
ProjectMaterial projectmaterial = db.ProjectMaterials.Find(id);
return View(projectmaterial);
}
//
//POST: /ProjectMaterial/Delete/5
[HttpPost, ActionName("Delete")]
public ActionResult DeleteConfirmed(int id)
{
ProjectMaterial projectmaterial = db.ProjectMaterials.Find(id);
db.ProjectMaterials.Remove(projectmaterial);
db.SaveChanges();
return RedirectToAction("Index");
}
Merci à l'avance les gars!! vraiment besoin de votre aide.
Merci, je veux calculer et transmettre le résultat de toutes les autres vues (Index, détails & Supprimer) à l'exception de la vue edit parce que le total sera calculé de la valeur..
OriginalL'auteur Thuto Paul Gaotingwe | 2012-01-19
Vous devez vous connecter pour publier un commentaire.
Vu que vous dites que vous êtes nouveau à l'MVC, je vous ai donné, vous avez quelques options, et a expliqué ce qui est le mieux et pourquoi, parce que c'est mieux de comprendre maintenant afin de ne pas prendre de mauvaises habitudes, surtout si vous commencez à construire de grands projets.
Vous n'avez pas nécessairement besoin de créer une variable, parce que vous pouvez faire le calcul de votre point de vue. Parce que vous êtes de passage le modèle de domaine directement à la vue que vous pouvez faire (rasoir):
Bien que c'est l'option la plus facile, je ne le recommande pas nécessairement ce que les points de vue devraient être dumb voir ASP.NET MVC: Quelle stupidité de mon être?.
Une autre option est de faire le calcul dans le contrôleur et passer la valeur dans le ViewBag, par exemple:
Ensuite, vous pouvez l'utiliser dans votre point de vue comme:
Encore une fois, c'est facile, mais je ne le recommande pas, comme le ViewBag n'est pas fortement typé - voir Est l'aide de ViewBag MVC mauvais?.
Vous pourriez mettre une propriété sur votre
ProjectMaterial
classe, qui est une solution élégante.Toutefois, si
Price
est une propriété qui n'est jamais utilisé au sein de votre point de vue (c'est à dire que vous venez de l'afficher), alors il ne devrait probablement pas être dans votre modèle de domaine, comme modèle de domaine est juste que - le stockage et l'accès aux données brutes.Peut-être la meilleure façon est de créer un viewmodel spécifiques à votre point de vue (voir http://stephenwalther.com/blog/archive/2009/04/13/asp.net-mvc-tip-50-ndash-create-view-models.aspx) avec un Prix se trouve dans la. Cela signifie que la propriété est utilisée uniquement lorsque cela est nécessaire, le modèle de domaine reste que, de votre point de vue reste muet et votre modèle de domaine n'est pas exposé à la vue. Voir Pourquoi Deux Classes, en Vue de Modèle et le Modèle de Domaine? aussi pour une bonne explication de vue des modèles
OriginalL'auteur Ian Routledge
Vous pouvez ajouter une propriété à votre
ProjectMaterial
modèle:OriginalL'auteur Darin Dimitrov
Vous pouvez avoir une fonction de modèle avec les instances de votre auto.taux, et l'auto.les éléments transmis à partir de votre point de vue. Ou sinon, vous pouvez calculer les valeurs de la multiplication dans chaque vue.
De toute façon, vous devriez être capable de stocker la copie sur la valeur de la multiplication (variable1) dans le sac, et la passer sur chaque point de vue, sans avoir à l'enregistrer dans la base de données.
OriginalL'auteur Priyeshj
OriginalL'auteur RaviTeja V