Новичок MVC, где вызывать методы - PullRequest
0 голосов
/ 26 марта 2012

Я делаю большой проект в веб-формах и ввел большой беспорядок в коде (можно решить с помощью небольшого рефакторинга), поэтому я решил взглянуть на mvc, похоже, что все предпочитают его над веб-формами.

У меня есть файл dll со всеми классами и методами LINQ to SQL для существующей базы данных sql db, и я начал учить себя, заново создав этот проект на mvc.Я сначала воссоздала свою домашнюю страницу с веб-форм до бритвы, пока все хорошо, и я воссоздала один изпользовательские элементы управления для частичного просмотра и зациклили его.Частичное представление строго типизировано одним из классов L2S, дело в том, что в нем есть некоторые необработанные данные. Как, например, моя модель для частичного просмотра - это мой класс L2S PostDetails: он состоит из некоторых данных, готовых к выводу, таких как: Title, Permalink,ViewsNumber и т. Д., Но он также содержит некоторые необработанные данные, такие как UserId (мне нужно вызвать метод из dll, чтобы получить имя пользователя), DateTimeCreated (для которого мне также нужно вызвать метод, чтобы получить разницу во времени), В веб-формах я бы сделал это в codebehind, ноЯ не уверен, где это сделать в mvc, может быть, в контроллере и передать его во ViewData. Я также прошу об этом на будущее, а не только в этом случае.

Ответы [ 3 ]

1 голос
/ 26 марта 2012

В MVC все ваши запросы будут обрабатываться методом действия в контроллере. а затем контроллер возвращает вид. Таким образом, вы можете получить данные в вашем контроллере (или другом слое, который будет вызываться из контроллера) и передать эти данные в ваше представление.

Строго типизированные представления - это чистый способ ведения дел. Создайте ViewModel для вашего сценария. В основном ViewModels выглядит аналогично сущностям. Пример: для отображения сведений о клиенте я создам модель представления с именем «CustomerViewModel»

public class CustomerViewModel
{
  public string CustomerId { set;get;}
  public string FirstName  { set;get;}
}

Тогда в моем CustomerController у меня будет метод get для клиента

public class CustomersController : Controller
{
  public ActionResult Details(int id)
  {
    CustomerViewModel objCustomer=new CustomerViewModel;
    objCustomer.FirstName="Samuel";
    //Instead of hardcoding the values here , you can get it
   // from the database using the id and assign to the properties
    return View(objCustomer);
  }


}

И у вас будет представление "Details.chtml" в ваших представлениях \ клиент папка со строгой типизацией к вашей CustomerViewModel

@model CustomerViewModel

<div>
   <h2>@Model.FirstName</h2>
   <p>@Model.CustomerId</h2>
</div>

К этому можно получить доступ как http://yourdomain.com/Customer/Details/25

Лично я предпочитаю, чтобы мои действия контроллера были тонкими. поэтому я пишу код GetFromDatabase в отдельном слое сервиса и просто вызываю этот метод из моего метода действия

1 голос
/ 26 марта 2012

Вы должны выполнить эти действия в контроллере. Контроллер - именно то, на что это похоже, он контролирует поток данных между моделью и представлением.

Вот пример использования ваших PostDetails:

PostDetailsModel

String Title {get;set;}
String Permalink {get;set;}
Int ViewNumber {get;set}
Int UserId {get;set}
DateTime DateTimeCreated {get;set;}

GetDetailsView : это будет запрошено вашим пользователем и будет визуальным представлением PostDetailsModel (однако вы хотите отформатировать его). Когда запрашивается этот Просмотр, ваш контроллер выполняет вызов ....

PostDetailsController

//This method will (by default) come from calling [BASEURL]/PostDetails/GetDetails
public ActionResult GetDetails()
{
    var details = new PostDetailsModel();
    details.UserId = GetUserId();
    details.ViewNumber = GetViewNumber();
    ....
    //By default this looks for a view in the PostDetails folder 
    //by the name of your method (GetDetails)
    return View(details);
}

Обратите внимание, что контроллер является маршрутизатором между моделью и представлением, в основном. Примечание, однако, было бы лучше заполнить вашу модель из методов, содержащихся в каком-то бизнес-уровне (как бы вы это ни реализовывали). Что-то вроде var details = BL.GetDetails();

Кроме того, когда пользователь отправляет запросы на сохранение данных, вы можете сделать это с помощью другого метода, который берет данные (будь то PostDetailsModel или int или ...) и делает все, что ему нужно, затем он может перенаправить обратно на экранное действие (или куда вам нужно, чтобы перейти)

В MVC содержится много информации с простым поиском в Google. Вот обзор Microsoft , но статья в Википедии очень лаконична, если вам нужны основы

0 голосов
/ 26 марта 2012

Я думаю, что вы найдете эту статью очень полезной:

Обзор MVC

Подробно объясняется, для чего должен использоваться каждый компонент:

Модели .Объекты модели - это части приложения, которые реализуют логику для предметной области приложения.Зачастую объекты модели извлекают и хранят состояние модели в базе данных.Например, объект Product может извлекать информацию из базы данных, работать с ней, а затем записывать обновленную информацию обратно в таблицу Products в SQL Server.

Views .Представления - это компоненты, которые отображают пользовательский интерфейс приложения.Как правило, этот интерфейс создается из данных модели.Примером может служить представление редактирования таблицы Products, в котором отображаются текстовые поля, раскрывающиеся списки и флажки в зависимости от текущего состояния объекта Products.

Контроллеры .Контроллеры - это компоненты, которые обрабатывают взаимодействие с пользователем, работают с моделью и, в конечном итоге, выбирают представление для отображения, отображающее пользовательский интерфейс.В приложении MVC представление отображает только информацию;контроллер обрабатывает и реагирует на пользовательский ввод и взаимодействие.Например, контроллер обрабатывает значения строки запроса и передает эти значения в модель, которая, в свою очередь, запрашивает базу данных, используя значения.

...