Лично у меня будет один контроллер => AccountsController
или UsersController
.В этом случае у меня будет ActionMethod
с именем Details
, в котором перечислены все детали для конкретного пользователя.
Если бы моим сайтом был StackOverflow, пример маршрута мог бы быть:что означает
{controller}/details/{id}/{optional anything .. which in this case is a name, for SEO}
У меня также был бы Edit
метод действия
например http://stackoverflow.com/users/edit/30674
или
{controller}/{action}/{id}
Теперь логика в методе действия Details
будет определять, что должно отображаться в представлении.Таким образом, если вы хотите иметь кнопку «Редактировать», метод действия контроллера должен выяснить это, и представление отобразит его, только если ему было сказано.
например (псевдокод)
public ActionResult Details(int userId)
{
var user = Database.Load<User>(userId);
if (user == null)
{
return HttpNotFound();
}
var viewModel = new DetailsViewModel
{
DisplayName = user.DisplayName,
Name = (user.FirstName + " " + user.LastName).Trim()
};
if (LoggedInUser != null && LoggedInUser.HasRole(Roles.CanEditThisUser)
{
viewModel.IsEditButtonVisible = true;
}
return View(viewModel);
}
и вид будет простым .. как
<snip html stuff>
@if (model.IsEditButtonVisible)
{
// display edit button Html code.
}
// Display user details Html stuff..
На заметку: -
- Представления строго типизированы в свою собственную ViewModel.
- Контроллер делает все , вычисляя из вещей.
- Вид действительно очень тупой.