gpt4 book ai didi

asp.net - 如何使用模型项和来自 ASP.net MVC 3 表单的输入进行简单计算?

转载 作者:行者123 更新时间:2023-12-04 14:17:23 25 4
gpt4 key购买 nike

我是编程和 ASP.net MVC 3 的新手,所以不要对我缺乏这方面的知识感到惊讶.. 好的,我想乘以两位小数,一位小数来自用户填写的表格,另一位小数来自Model 类(从数据库中获取)。

我有两个模型类,称为 RATE & PROJECTMATERIAL 。 RATE 类有一个名为 的项目。金额 表示 Rate 的数量,而 PROJECTMATERIAL 类有一个项目 数量 .这些类(class)是相关的,我想说 变量 1 = 数量*费率.金额 并将 variable1 返回到 my Index、Delete、Details View 。我不想将 variable1 存储到我的数据库,但我只想在我的 View 中显示.....但我不知道如何以及在哪里做

来自项目 Material 类的代码..

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

}

来自范围类的代码..
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; }
}

来自项目 Controller 类的代码...
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");
}

提前谢谢你们!!真的需要你的帮助。

最佳答案

看到你说你是 MVC 的新手,我给了你一些选择并解释了哪个是最好的以及为什么,因为现在最好理解这样你就不会养成坏习惯,特别是如果你开始构建更大的项目。

您不一定需要创建变量,因为您可以在 View 中进行该计算。因为您将域模型直接传递给您可以执行的 View (在 Razor 中):

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

虽然这是最简单的选择,但我不一定推荐这个,因为 View 应该是愚蠢的 - 见 ASP.NET MVC: How dumb should my view be? .

另一种选择是在 Controller 中进行计算并在 ViewBag 中传递值,例如:
public ViewResult Details(int id)
{
ProjectMaterial projectmaterial = db.ProjectMaterials.Find(id);
ViewBag.Price = projectmaterial.Quantity * projectmaterial.Rates.Amountl
return View(projectmaterial);
}

然后你可以在你的 View 中使用它,比如:
@ViewBag.Price

同样,这很容易,但我不推荐它,因为 ViewBag 不是强类型的 - 参见 Is using ViewBag in MVC bad? .

你可以在你的 ProjectMaterial 上放置一个属性类,这是一个巧妙的解决方案。
public decimal Price
{
get
{
return Quantity * Rates.Amount;
}
}

但是,如果 Price是一个仅在您的 View 中使用的属性(即您只是显示它),那么它可能不应该出现在您的域模型中,因为您的域模型就是这样 - 存储和访问原始数据。

也许最好的方法是创建一个特定于您的 View 的 View 模型(参见 http://stephenwalther.com/blog/archive/2009/04/13/asp.net-mvc-tip-50-ndash-create-view-models.aspx ),并带有 Price 属性。这意味着该属性仅在需要的地方使用,域模型保持不变,您的 View 仍然是愚蠢的,并且您的域模型不会暴露给您的 View 。见 Why Two Classes, View Model and Domain Model?也可以很好地解释 View 模型

关于asp.net - 如何使用模型项和来自 ASP.net MVC 3 表单的输入进行简单计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8923352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com