-
Notifications
You must be signed in to change notification settings - Fork 10
/
CustomersController.cs
159 lines (137 loc) · 4.62 KB
/
CustomersController.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace GetAllGetOne.Controllers
{
public class CustomersController : Controller
{
// Reference to a manager object
private Manager m = new Manager();
// GET: Customers
public ActionResult Index()
{
// Fetch the collection
var c = m.CustomerGetAll();
// Pass the collection to the view
return View(c);
}
// GET: Customers/Details/5
public ActionResult Details(int? id)
{
// Attempt to get the matching object
var o = m.CustomerGetById(id.GetValueOrDefault());
if (o == null)
{
return HttpNotFound();
}
else
{
// Pass the object to the view
return View(o);
}
}
// GET: Customers/Create
public ActionResult Create()
{
// At your option, create and send an object to the view
return View();
}
// POST: Customers/Create
[HttpPost]
public ActionResult Create(CustomerAdd newItem)
{
// Validate the input
if (!ModelState.IsValid)
{
return View(newItem);
}
// Process the input
var addedItem = m.CustomerAdd(newItem);
if (addedItem == null)
{
return View(newItem);
}
else
{
return RedirectToAction("details", new { id = addedItem.CustomerId });
}
}
// GET: Customers/Edit/5
public ActionResult Edit(int? id)
{
// Attempt to fetch the matching object
var o = m.CustomerGetById(id.GetValueOrDefault());
if (o == null)
{
return HttpNotFound();
}
else
{
// Create and configure an "edit form"
// Notice that o is a CustomerBase object
// We must map it to a CustomerEditContactInfoForm object
// Notice that we can use AutoMapper anywhere,
// and not just in the Manager class!
var editForm = AutoMapper.Mapper.Map<CustomerEditContactInfoForm>(o);
return View(editForm);
}
}
// POST: Customers/Edit/5
[HttpPost]
public ActionResult Edit(int? id, CustomerEditContactInfo newItem)
{
// Validate the input
if (!ModelState.IsValid)
{
// Our "version 1" approach is to display the "edit form" again
return RedirectToAction("edit", new { id = newItem.CustomerId });
}
if (id.GetValueOrDefault() != newItem.CustomerId)
{
// This appears to be data tampering, so redirect the user away
return RedirectToAction("index");
}
// Attempt to do the update
var editedItem = m.CustomerEditContactInfo(newItem);
if (editedItem == null)
{
// There was a problem updating the object
// Our "version 1" approach is to display the "edit form" again
return RedirectToAction("edit", new { id = newItem.CustomerId });
}
else
{
// Show the details view, which will have the updated data
return RedirectToAction("details", new { id = newItem.CustomerId });
}
}
// GET: Customers/Delete/5
public ActionResult Delete(int? id)
{
var itemToDelete = m.CustomerGetById(id.GetValueOrDefault());
if (itemToDelete == null)
{
// Don't leak info about the delete attempt
// Simply redirect
return RedirectToAction("index");
}
else
{
return View(itemToDelete);
}
}
// POST: Customers/Delete/5
[HttpPost]
public ActionResult Delete(int? id, FormCollection collection)
{
var result = m.CustomerDelete(id.GetValueOrDefault());
// "result" will be true or false
// We probably won't do much with the result, because
// we don't want to leak info about the delete attempt
// In the end, we should just redirect to the list view
return RedirectToAction("index");
}
}
}