Vasil Ivanishvili
Vasil Ivanishvili

Reputation: 47

Method calling method

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

Answers (1)

Sweeper
Sweeper

Reputation: 271645

You have accidentally or intentionally changed the callers to return void. The callers' signatures should not change. They should still return ActionResults:

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

Related Questions