Thu*_*gwe 6 asp.net asp.net-mvc-3
我是编程和ASP.net MVC 3的新手,所以不要对我对此缺乏了解感到惊讶.好吧,我想要乘以两位小数,一位十进制来自用户填充的形式,另一位十进制来自Model类(从数据库中获取).
我有两个名为RATE&PROJECTMATERIAL的Model类.RATE类有一个名为Amount的项目,表示一个Rate的数量,PROJECTMATERIAL类有一个项目数量.类是相关的,我希望能够说变量1 =数量*Rates.amount并将variable1返回到我的索引,删除,详细信息视图.我不想将variable1存储到我的数据库,但我只想在我的视图中显示.....但我不知道如何以及在哪里做
项目材料类的代码..
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; }
}
Run Code Online (Sandbox Code Playgroud)
范围类的代码..
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; }
}
Run Code Online (Sandbox Code Playgroud)
项目控制器类的代码......
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");
}
Run Code Online (Sandbox Code Playgroud)
Thanx提前家伙!! 真的需要你的帮助.
看到你说你是MVC的新手,我给了你一些选择,并解释哪个最好,为什么,因为现在最好去理解,这样你就不会养成坏习惯,特别是如果你开始建造更大的项目.
您不一定需要创建变量,因为您可以在视图中执行该计算.因为您将域模型直接传递给视图,所以您可以(在剃刀中):
@(Model.Quantity * Model.Rates.Amount)
Run Code Online (Sandbox Code Playgroud)
虽然这是最简单的选择,但我不一定会推荐这个,因为视图应该是愚蠢的 - 请参阅ASP.NET MVC:我的观点应该是多么愚蠢?.
另一种选择是在控制器中进行计算并传递ViewBag中的值,例如:
public ViewResult Details(int id)
{
ProjectMaterial projectmaterial = db.ProjectMaterials.Find(id);
ViewBag.Price = projectmaterial.Quantity * projectmaterial.Rates.Amountl
return View(projectmaterial);
}
Run Code Online (Sandbox Code Playgroud)
然后你可以在你的视图中使用它:
@ViewBag.Price
Run Code Online (Sandbox Code Playgroud)
再次,这很容易,但我不推荐它,因为ViewBag没有强类型 - 请参阅在MVC中使用ViewBag是不是很糟糕?.
你可以把一个属性放在你的ProjectMaterial
班级上,这是一个很好的解决方案.
public decimal Price
{
get
{
return Quantity * Rates.Amount;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果Price
是一个只在视图中使用的属性(即您只是显示它),那么它可能不应该在您的域模型中,因为您的域模型就是 - 存储和访问原始数据.
也许最好的方法是创建一个特定于您的视图的视图模型(请参阅http://stephenwalther.com/blog/archive/2009/04/13/asp.net-mvc-tip-50-ndash-create-view-models .aspx)具有Price属性.这意味着该属性仅在需要的地方使用,域模型保持不变,您的视图仍然愚蠢,您的域模型不会暴露给您的视图.请参阅为什么选择两个类,查看模型和域模型?也是对视图模型的一个很好的解释
归档时间: |
|
查看次数: |
19350 次 |
最近记录: |