Reputation: 47
I have some asp.net mvc methods which has lots of common lines.
So I tried to write one common metod to eliminate code reuse, but I failed to receive result. Can you show where is the problem?
// Initial Code:
public ActionResult Details(int? id) {
if (id == null)
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
Product product = db.Products.Find(id);
if (product == null)
return HttpNotFound();
return View(product);
}
[HttpGet]
public ActionResult Edit(int? id) {
if (id == null)
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
Product product = db.Products.Find(id);
if (product == null)
return HttpNotFound();
return View(product);
}
[HttpGet]
public ActionResult Delete (int? id) {
if (id == null)
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
Product product = db.Products.Find(id);
if (product == null)
return HttpNotFound();
return View(product);
}
// Final Code:
public void Details(int? id) {
Common(id);
}
[HttpGet]
public void Edit(int? id) {
Common(id);
}
[HttpGet]
public void Delete (int? id) {
Common(id);
}
public ActionResult Common(int? Id) {
if (Id == null)
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
Product product = db.Products.Find(Id);
if (product == null)
return HttpNotFound();
return View(product);
}
Blank screen on output
Upvotes: 0
Views: 64
Reputation: 271645
You have accidentally or intentionally changed the callers to return void
. The callers' signatures should not change. They should still return ActionResult
s:
public ActionResult Details(int? id) {
return Common(id);
}
[HttpGet]
public ActionResult Edit(int? id) {
return Common(id);
}
[HttpGet]
public ActionResult Delete (int? id) {
return Common(id);
}
Upvotes: 5