How to make simple calculations using model items and an input from a form in ASP.net MVC 3?












6















Am new to programming and ASP.net MVC 3 so don't be surprised by my lack of knowledge on this.. Okay, I want to multiply two decimals, One decimal comes from the form that a user fills and the other decimal comes from the Model class (gets it from the database).



I have two Model classes called RATE & PROJECTMATERIAL . The RATE class has an item called Amount that states the amount of a Rate and the PROJECTMATERIAL class has an item quantity. The classes are related and i want to be able to say variable1 = quantity*Rates.amount and return variable1 to the my Index, Delete, Details views. I don't want to store variable1 to my database but i just want to display in my views.....but i don't know how and where to do it



Code from Project material class..



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 from scope class..



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 from project controller class...



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");
}


Thanx in advance guys!! really need your help.










share|improve this question




















  • 1





    It's unclear what you are trying to do. Are you trying to calculate the totals in the controller and pass it back to a view OR are you trying to calculate a total in a controller and have it available to ALL other views?

    – Sean
    Jan 19 '12 at 9:06











  • Thanx, I want to calculate and pass the result to all the other views (Index, details & Delete) except the edit view because the total will be a calculated value..

    – Thuto Paul Gaotingwe
    Jan 19 '12 at 9:42
















6















Am new to programming and ASP.net MVC 3 so don't be surprised by my lack of knowledge on this.. Okay, I want to multiply two decimals, One decimal comes from the form that a user fills and the other decimal comes from the Model class (gets it from the database).



I have two Model classes called RATE & PROJECTMATERIAL . The RATE class has an item called Amount that states the amount of a Rate and the PROJECTMATERIAL class has an item quantity. The classes are related and i want to be able to say variable1 = quantity*Rates.amount and return variable1 to the my Index, Delete, Details views. I don't want to store variable1 to my database but i just want to display in my views.....but i don't know how and where to do it



Code from Project material class..



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 from scope class..



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 from project controller class...



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");
}


Thanx in advance guys!! really need your help.










share|improve this question




















  • 1





    It's unclear what you are trying to do. Are you trying to calculate the totals in the controller and pass it back to a view OR are you trying to calculate a total in a controller and have it available to ALL other views?

    – Sean
    Jan 19 '12 at 9:06











  • Thanx, I want to calculate and pass the result to all the other views (Index, details & Delete) except the edit view because the total will be a calculated value..

    – Thuto Paul Gaotingwe
    Jan 19 '12 at 9:42














6












6








6


1






Am new to programming and ASP.net MVC 3 so don't be surprised by my lack of knowledge on this.. Okay, I want to multiply two decimals, One decimal comes from the form that a user fills and the other decimal comes from the Model class (gets it from the database).



I have two Model classes called RATE & PROJECTMATERIAL . The RATE class has an item called Amount that states the amount of a Rate and the PROJECTMATERIAL class has an item quantity. The classes are related and i want to be able to say variable1 = quantity*Rates.amount and return variable1 to the my Index, Delete, Details views. I don't want to store variable1 to my database but i just want to display in my views.....but i don't know how and where to do it



Code from Project material class..



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 from scope class..



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 from project controller class...



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");
}


Thanx in advance guys!! really need your help.










share|improve this question
















Am new to programming and ASP.net MVC 3 so don't be surprised by my lack of knowledge on this.. Okay, I want to multiply two decimals, One decimal comes from the form that a user fills and the other decimal comes from the Model class (gets it from the database).



I have two Model classes called RATE & PROJECTMATERIAL . The RATE class has an item called Amount that states the amount of a Rate and the PROJECTMATERIAL class has an item quantity. The classes are related and i want to be able to say variable1 = quantity*Rates.amount and return variable1 to the my Index, Delete, Details views. I don't want to store variable1 to my database but i just want to display in my views.....but i don't know how and where to do it



Code from Project material class..



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 from scope class..



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 from project controller class...



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");
}


Thanx in advance guys!! really need your help.







asp.net asp.net-mvc-3






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Jan 19 '12 at 9:07









balexandre

53k33204295




53k33204295










asked Jan 19 '12 at 8:58









Thuto Paul GaotingweThuto Paul Gaotingwe

58021015




58021015








  • 1





    It's unclear what you are trying to do. Are you trying to calculate the totals in the controller and pass it back to a view OR are you trying to calculate a total in a controller and have it available to ALL other views?

    – Sean
    Jan 19 '12 at 9:06











  • Thanx, I want to calculate and pass the result to all the other views (Index, details & Delete) except the edit view because the total will be a calculated value..

    – Thuto Paul Gaotingwe
    Jan 19 '12 at 9:42














  • 1





    It's unclear what you are trying to do. Are you trying to calculate the totals in the controller and pass it back to a view OR are you trying to calculate a total in a controller and have it available to ALL other views?

    – Sean
    Jan 19 '12 at 9:06











  • Thanx, I want to calculate and pass the result to all the other views (Index, details & Delete) except the edit view because the total will be a calculated value..

    – Thuto Paul Gaotingwe
    Jan 19 '12 at 9:42








1




1





It's unclear what you are trying to do. Are you trying to calculate the totals in the controller and pass it back to a view OR are you trying to calculate a total in a controller and have it available to ALL other views?

– Sean
Jan 19 '12 at 9:06





It's unclear what you are trying to do. Are you trying to calculate the totals in the controller and pass it back to a view OR are you trying to calculate a total in a controller and have it available to ALL other views?

– Sean
Jan 19 '12 at 9:06













Thanx, I want to calculate and pass the result to all the other views (Index, details & Delete) except the edit view because the total will be a calculated value..

– Thuto Paul Gaotingwe
Jan 19 '12 at 9:42





Thanx, I want to calculate and pass the result to all the other views (Index, details & Delete) except the edit view because the total will be a calculated value..

– Thuto Paul Gaotingwe
Jan 19 '12 at 9:42












4 Answers
4






active

oldest

votes


















7














Seeing as you say you're new to MVC, I've given you a few options and explained which is best and why, because it's better to understand now so you don't get in to bad habits, especially if you start building larger projects.



You don't necessarily need to create a variable, because you can do that calculation in your view. Because you are passing the domain model directly to the view you can do (in razor):



@(Model.Quantity * Model.Rates.Amount)


Although this is the easiest option I wouldn't necessarily recommend this as views should be dumb - see ASP.NET MVC: How dumb should my view be?.



Another option is to do the calculation in the controller and pass the value in the ViewBag, e.g.:



public ViewResult Details(int id)
{
ProjectMaterial projectmaterial = db.ProjectMaterials.Find(id);
ViewBag.Price = projectmaterial.Quantity * projectmaterial.Rates.Amountl
return View(projectmaterial);
}


Then you could use it in your view like:



@ViewBag.Price


Again, this is easy but I wouldn't recommend it, as ViewBag isn't strongly typed - see Is using ViewBag in MVC bad?.



You could put a property on your ProjectMaterial class like, which is a neat solution.



public decimal Price
{
get
{
return Quantity * Rates.Amount;
}
}


However, if Price is a property that is only ever used within your views (ie you just display it) then it probably shouldn't be in your domain model, as your domain model is just that - storing and accessing the raw data.



Maybe the best way is to create a viewmodel specific to your view (see http://stephenwalther.com/blog/archive/2009/04/13/asp.net-mvc-tip-50-ndash-create-view-models.aspx) with a Price propert. This means that the property is only used where it is needed, the domain model remains just that, your view remains dumb and your domain model is not exposed to your view. See Why Two Classes, View Model and Domain Model? also for a good explanation of view models






share|improve this answer


























  • Thanks a lot!!! i wanted the best way of doing it and am reading through your links now, i tried the one where I put a property in the ProjectMaterial Class before (yesterday) and it did not work well for me, every-time i create a new project material i will get a Null-Reference Exception, because Rates.Amount was NULL i realized this was a logical error because i knew it was not true because the rates table was populated. Again Thanx a lot!!

    – Thuto Paul Gaotingwe
    Jan 19 '12 at 10:17



















2














You could add a property to your ProjectMaterial model:



public decimal Price
{
get
{
return Quantity * Rates.Amount;
}
}





share|improve this answer
























  • I tried this earlier and it looked like it was going to work because all the Project Material views appeared to be fine but every time i create a new ProjectMaterial i received a Null-reference exception error. it complained that Rates.Amount was null which was not true because i populated the rates table

    – Thuto Paul Gaotingwe
    Jan 19 '12 at 9:51



















0














You might want to have a model function with instances of your self.rate, and self.material items passed on from your views. Or otherwise you can individually calculate the values of the multiplication in each view.



Either way, you should be able to store the copy over the value of multiplication (variable1) in the view's bag, and pass it onto each view without having to save it in the DB.



ViewBag.variable1 = rate*material
return View()





share|improve this answer































    0














    @(int.Parse(variable) * your value) 





    share|improve this answer


























    • when we need multiply the string values in razor view we can use like this.

      – RaviTeja V
      Dec 9 '18 at 7:10











    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f8923352%2fhow-to-make-simple-calculations-using-model-items-and-an-input-from-a-form-in-as%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    4 Answers
    4






    active

    oldest

    votes








    4 Answers
    4






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    7














    Seeing as you say you're new to MVC, I've given you a few options and explained which is best and why, because it's better to understand now so you don't get in to bad habits, especially if you start building larger projects.



    You don't necessarily need to create a variable, because you can do that calculation in your view. Because you are passing the domain model directly to the view you can do (in razor):



    @(Model.Quantity * Model.Rates.Amount)


    Although this is the easiest option I wouldn't necessarily recommend this as views should be dumb - see ASP.NET MVC: How dumb should my view be?.



    Another option is to do the calculation in the controller and pass the value in the ViewBag, e.g.:



    public ViewResult Details(int id)
    {
    ProjectMaterial projectmaterial = db.ProjectMaterials.Find(id);
    ViewBag.Price = projectmaterial.Quantity * projectmaterial.Rates.Amountl
    return View(projectmaterial);
    }


    Then you could use it in your view like:



    @ViewBag.Price


    Again, this is easy but I wouldn't recommend it, as ViewBag isn't strongly typed - see Is using ViewBag in MVC bad?.



    You could put a property on your ProjectMaterial class like, which is a neat solution.



    public decimal Price
    {
    get
    {
    return Quantity * Rates.Amount;
    }
    }


    However, if Price is a property that is only ever used within your views (ie you just display it) then it probably shouldn't be in your domain model, as your domain model is just that - storing and accessing the raw data.



    Maybe the best way is to create a viewmodel specific to your view (see http://stephenwalther.com/blog/archive/2009/04/13/asp.net-mvc-tip-50-ndash-create-view-models.aspx) with a Price propert. This means that the property is only used where it is needed, the domain model remains just that, your view remains dumb and your domain model is not exposed to your view. See Why Two Classes, View Model and Domain Model? also for a good explanation of view models






    share|improve this answer


























    • Thanks a lot!!! i wanted the best way of doing it and am reading through your links now, i tried the one where I put a property in the ProjectMaterial Class before (yesterday) and it did not work well for me, every-time i create a new project material i will get a Null-Reference Exception, because Rates.Amount was NULL i realized this was a logical error because i knew it was not true because the rates table was populated. Again Thanx a lot!!

      – Thuto Paul Gaotingwe
      Jan 19 '12 at 10:17
















    7














    Seeing as you say you're new to MVC, I've given you a few options and explained which is best and why, because it's better to understand now so you don't get in to bad habits, especially if you start building larger projects.



    You don't necessarily need to create a variable, because you can do that calculation in your view. Because you are passing the domain model directly to the view you can do (in razor):



    @(Model.Quantity * Model.Rates.Amount)


    Although this is the easiest option I wouldn't necessarily recommend this as views should be dumb - see ASP.NET MVC: How dumb should my view be?.



    Another option is to do the calculation in the controller and pass the value in the ViewBag, e.g.:



    public ViewResult Details(int id)
    {
    ProjectMaterial projectmaterial = db.ProjectMaterials.Find(id);
    ViewBag.Price = projectmaterial.Quantity * projectmaterial.Rates.Amountl
    return View(projectmaterial);
    }


    Then you could use it in your view like:



    @ViewBag.Price


    Again, this is easy but I wouldn't recommend it, as ViewBag isn't strongly typed - see Is using ViewBag in MVC bad?.



    You could put a property on your ProjectMaterial class like, which is a neat solution.



    public decimal Price
    {
    get
    {
    return Quantity * Rates.Amount;
    }
    }


    However, if Price is a property that is only ever used within your views (ie you just display it) then it probably shouldn't be in your domain model, as your domain model is just that - storing and accessing the raw data.



    Maybe the best way is to create a viewmodel specific to your view (see http://stephenwalther.com/blog/archive/2009/04/13/asp.net-mvc-tip-50-ndash-create-view-models.aspx) with a Price propert. This means that the property is only used where it is needed, the domain model remains just that, your view remains dumb and your domain model is not exposed to your view. See Why Two Classes, View Model and Domain Model? also for a good explanation of view models






    share|improve this answer


























    • Thanks a lot!!! i wanted the best way of doing it and am reading through your links now, i tried the one where I put a property in the ProjectMaterial Class before (yesterday) and it did not work well for me, every-time i create a new project material i will get a Null-Reference Exception, because Rates.Amount was NULL i realized this was a logical error because i knew it was not true because the rates table was populated. Again Thanx a lot!!

      – Thuto Paul Gaotingwe
      Jan 19 '12 at 10:17














    7












    7








    7







    Seeing as you say you're new to MVC, I've given you a few options and explained which is best and why, because it's better to understand now so you don't get in to bad habits, especially if you start building larger projects.



    You don't necessarily need to create a variable, because you can do that calculation in your view. Because you are passing the domain model directly to the view you can do (in razor):



    @(Model.Quantity * Model.Rates.Amount)


    Although this is the easiest option I wouldn't necessarily recommend this as views should be dumb - see ASP.NET MVC: How dumb should my view be?.



    Another option is to do the calculation in the controller and pass the value in the ViewBag, e.g.:



    public ViewResult Details(int id)
    {
    ProjectMaterial projectmaterial = db.ProjectMaterials.Find(id);
    ViewBag.Price = projectmaterial.Quantity * projectmaterial.Rates.Amountl
    return View(projectmaterial);
    }


    Then you could use it in your view like:



    @ViewBag.Price


    Again, this is easy but I wouldn't recommend it, as ViewBag isn't strongly typed - see Is using ViewBag in MVC bad?.



    You could put a property on your ProjectMaterial class like, which is a neat solution.



    public decimal Price
    {
    get
    {
    return Quantity * Rates.Amount;
    }
    }


    However, if Price is a property that is only ever used within your views (ie you just display it) then it probably shouldn't be in your domain model, as your domain model is just that - storing and accessing the raw data.



    Maybe the best way is to create a viewmodel specific to your view (see http://stephenwalther.com/blog/archive/2009/04/13/asp.net-mvc-tip-50-ndash-create-view-models.aspx) with a Price propert. This means that the property is only used where it is needed, the domain model remains just that, your view remains dumb and your domain model is not exposed to your view. See Why Two Classes, View Model and Domain Model? also for a good explanation of view models






    share|improve this answer















    Seeing as you say you're new to MVC, I've given you a few options and explained which is best and why, because it's better to understand now so you don't get in to bad habits, especially if you start building larger projects.



    You don't necessarily need to create a variable, because you can do that calculation in your view. Because you are passing the domain model directly to the view you can do (in razor):



    @(Model.Quantity * Model.Rates.Amount)


    Although this is the easiest option I wouldn't necessarily recommend this as views should be dumb - see ASP.NET MVC: How dumb should my view be?.



    Another option is to do the calculation in the controller and pass the value in the ViewBag, e.g.:



    public ViewResult Details(int id)
    {
    ProjectMaterial projectmaterial = db.ProjectMaterials.Find(id);
    ViewBag.Price = projectmaterial.Quantity * projectmaterial.Rates.Amountl
    return View(projectmaterial);
    }


    Then you could use it in your view like:



    @ViewBag.Price


    Again, this is easy but I wouldn't recommend it, as ViewBag isn't strongly typed - see Is using ViewBag in MVC bad?.



    You could put a property on your ProjectMaterial class like, which is a neat solution.



    public decimal Price
    {
    get
    {
    return Quantity * Rates.Amount;
    }
    }


    However, if Price is a property that is only ever used within your views (ie you just display it) then it probably shouldn't be in your domain model, as your domain model is just that - storing and accessing the raw data.



    Maybe the best way is to create a viewmodel specific to your view (see http://stephenwalther.com/blog/archive/2009/04/13/asp.net-mvc-tip-50-ndash-create-view-models.aspx) with a Price propert. This means that the property is only used where it is needed, the domain model remains just that, your view remains dumb and your domain model is not exposed to your view. See Why Two Classes, View Model and Domain Model? also for a good explanation of view models







    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited May 23 '17 at 11:53









    Community

    11




    11










    answered Jan 19 '12 at 9:37









    Ian RoutledgeIan Routledge

    3,27911419




    3,27911419













    • Thanks a lot!!! i wanted the best way of doing it and am reading through your links now, i tried the one where I put a property in the ProjectMaterial Class before (yesterday) and it did not work well for me, every-time i create a new project material i will get a Null-Reference Exception, because Rates.Amount was NULL i realized this was a logical error because i knew it was not true because the rates table was populated. Again Thanx a lot!!

      – Thuto Paul Gaotingwe
      Jan 19 '12 at 10:17



















    • Thanks a lot!!! i wanted the best way of doing it and am reading through your links now, i tried the one where I put a property in the ProjectMaterial Class before (yesterday) and it did not work well for me, every-time i create a new project material i will get a Null-Reference Exception, because Rates.Amount was NULL i realized this was a logical error because i knew it was not true because the rates table was populated. Again Thanx a lot!!

      – Thuto Paul Gaotingwe
      Jan 19 '12 at 10:17

















    Thanks a lot!!! i wanted the best way of doing it and am reading through your links now, i tried the one where I put a property in the ProjectMaterial Class before (yesterday) and it did not work well for me, every-time i create a new project material i will get a Null-Reference Exception, because Rates.Amount was NULL i realized this was a logical error because i knew it was not true because the rates table was populated. Again Thanx a lot!!

    – Thuto Paul Gaotingwe
    Jan 19 '12 at 10:17





    Thanks a lot!!! i wanted the best way of doing it and am reading through your links now, i tried the one where I put a property in the ProjectMaterial Class before (yesterday) and it did not work well for me, every-time i create a new project material i will get a Null-Reference Exception, because Rates.Amount was NULL i realized this was a logical error because i knew it was not true because the rates table was populated. Again Thanx a lot!!

    – Thuto Paul Gaotingwe
    Jan 19 '12 at 10:17













    2














    You could add a property to your ProjectMaterial model:



    public decimal Price
    {
    get
    {
    return Quantity * Rates.Amount;
    }
    }





    share|improve this answer
























    • I tried this earlier and it looked like it was going to work because all the Project Material views appeared to be fine but every time i create a new ProjectMaterial i received a Null-reference exception error. it complained that Rates.Amount was null which was not true because i populated the rates table

      – Thuto Paul Gaotingwe
      Jan 19 '12 at 9:51
















    2














    You could add a property to your ProjectMaterial model:



    public decimal Price
    {
    get
    {
    return Quantity * Rates.Amount;
    }
    }





    share|improve this answer
























    • I tried this earlier and it looked like it was going to work because all the Project Material views appeared to be fine but every time i create a new ProjectMaterial i received a Null-reference exception error. it complained that Rates.Amount was null which was not true because i populated the rates table

      – Thuto Paul Gaotingwe
      Jan 19 '12 at 9:51














    2












    2








    2







    You could add a property to your ProjectMaterial model:



    public decimal Price
    {
    get
    {
    return Quantity * Rates.Amount;
    }
    }





    share|improve this answer













    You could add a property to your ProjectMaterial model:



    public decimal Price
    {
    get
    {
    return Quantity * Rates.Amount;
    }
    }






    share|improve this answer












    share|improve this answer



    share|improve this answer










    answered Jan 19 '12 at 9:05









    Darin DimitrovDarin Dimitrov

    845k22230152746




    845k22230152746













    • I tried this earlier and it looked like it was going to work because all the Project Material views appeared to be fine but every time i create a new ProjectMaterial i received a Null-reference exception error. it complained that Rates.Amount was null which was not true because i populated the rates table

      – Thuto Paul Gaotingwe
      Jan 19 '12 at 9:51



















    • I tried this earlier and it looked like it was going to work because all the Project Material views appeared to be fine but every time i create a new ProjectMaterial i received a Null-reference exception error. it complained that Rates.Amount was null which was not true because i populated the rates table

      – Thuto Paul Gaotingwe
      Jan 19 '12 at 9:51

















    I tried this earlier and it looked like it was going to work because all the Project Material views appeared to be fine but every time i create a new ProjectMaterial i received a Null-reference exception error. it complained that Rates.Amount was null which was not true because i populated the rates table

    – Thuto Paul Gaotingwe
    Jan 19 '12 at 9:51





    I tried this earlier and it looked like it was going to work because all the Project Material views appeared to be fine but every time i create a new ProjectMaterial i received a Null-reference exception error. it complained that Rates.Amount was null which was not true because i populated the rates table

    – Thuto Paul Gaotingwe
    Jan 19 '12 at 9:51











    0














    You might want to have a model function with instances of your self.rate, and self.material items passed on from your views. Or otherwise you can individually calculate the values of the multiplication in each view.



    Either way, you should be able to store the copy over the value of multiplication (variable1) in the view's bag, and pass it onto each view without having to save it in the DB.



    ViewBag.variable1 = rate*material
    return View()





    share|improve this answer




























      0














      You might want to have a model function with instances of your self.rate, and self.material items passed on from your views. Or otherwise you can individually calculate the values of the multiplication in each view.



      Either way, you should be able to store the copy over the value of multiplication (variable1) in the view's bag, and pass it onto each view without having to save it in the DB.



      ViewBag.variable1 = rate*material
      return View()





      share|improve this answer


























        0












        0








        0







        You might want to have a model function with instances of your self.rate, and self.material items passed on from your views. Or otherwise you can individually calculate the values of the multiplication in each view.



        Either way, you should be able to store the copy over the value of multiplication (variable1) in the view's bag, and pass it onto each view without having to save it in the DB.



        ViewBag.variable1 = rate*material
        return View()





        share|improve this answer













        You might want to have a model function with instances of your self.rate, and self.material items passed on from your views. Or otherwise you can individually calculate the values of the multiplication in each view.



        Either way, you should be able to store the copy over the value of multiplication (variable1) in the view's bag, and pass it onto each view without having to save it in the DB.



        ViewBag.variable1 = rate*material
        return View()






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Jan 19 '12 at 9:23









        PriyeshjPriyeshj

        6951328




        6951328























            0














            @(int.Parse(variable) * your value) 





            share|improve this answer


























            • when we need multiply the string values in razor view we can use like this.

              – RaviTeja V
              Dec 9 '18 at 7:10
















            0














            @(int.Parse(variable) * your value) 





            share|improve this answer


























            • when we need multiply the string values in razor view we can use like this.

              – RaviTeja V
              Dec 9 '18 at 7:10














            0












            0








            0







            @(int.Parse(variable) * your value) 





            share|improve this answer















            @(int.Parse(variable) * your value) 






            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited Nov 25 '18 at 12:44









            Zoe

            12k74580




            12k74580










            answered Nov 25 '18 at 12:29









            RaviTeja VRaviTeja V

            755




            755













            • when we need multiply the string values in razor view we can use like this.

              – RaviTeja V
              Dec 9 '18 at 7:10



















            • when we need multiply the string values in razor view we can use like this.

              – RaviTeja V
              Dec 9 '18 at 7:10

















            when we need multiply the string values in razor view we can use like this.

            – RaviTeja V
            Dec 9 '18 at 7:10





            when we need multiply the string values in razor view we can use like this.

            – RaviTeja V
            Dec 9 '18 at 7:10


















            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f8923352%2fhow-to-make-simple-calculations-using-model-items-and-an-input-from-a-form-in-as%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Feedback on college project

            Futebolista

            Albești (Vaslui)