#asp.net #asp.net-mvc-4
#asp.net #asp.net-mvc-4
Вопрос:
Я пытаюсь изучить MVC. У меня возникли некоторые проблемы с пониманием того, как вернуть данные из моего класса DataService в мое представление. Вот структура моего решения на данный момент:
Решение содержит два проекта и базу данных. Первый проект — это мой проект DataService, который содержит мою модель сущности и мой класс обслуживания, называемый AppDataService.
Второй проект — это сам веб-сайт. Он содержит мой HomeController, представление индекса и мою модель инвентаризации, которая содержит две модели: элемент и контекст БД для элементов, называемых Каталог.
Цель приложения — создать простое приложение, которое отображает инвентаризацию склада и отображает информацию для пользователя. Это не для домашнего задания, поэтому нет предопределенных целей. Я просто пытаюсь самостоятельно изучить соглашение MVC. Я понимаю, что это довольно простой вопрос, но я вроде как в тупике.
Вот мой код:
AppDataServices:
public class AppDataService:IAppDataService
{
public Inventory GetItem(string srch)
{
Inventory item = null;
using (var data = new WCSDatabaseEntities())
{
item = data.Inventories.FirstOrDefault(x => x.Name == srch);
}
return item;
}
public List<Inventory> GetCatalog()
{
List<Inventory> catalog = null;
using (var data = new WCSDatabaseEntities())
{
catalog = data.Inventories.ToList();
}
return catalog;
}
public void Dispose()
{
}
}
Модели моего приложения:
public class Item
{
public int MediaId { get; set; }
public string Name { get; set; }
public int InStock { get; set; }
public decimal Price { get; set; }
public string Manufacturer { get; set; }
}
public class InventoryDbContext : DbContext
{
public DbSet<Item> Catalog { get; set; }
}
В настоящее время ничего из того, что я пробовал, не сработало, поэтому действие индекса моего домашнего контроллера просто возвращает представление, и представление в настоящее время не принимает модель. Может кто-нибудь помочь объяснить, как я беру возвращенные объекты и прикрепляю их к модели для отправки в представление? Заранее спасибо! Я понимаю, что это действительно простой вопрос.
Редактировать: вот домашний контроллер.
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
}
Комментарии:
1. Можете ли вы опубликовать код со своего контроллера? Также вы, похоже, не используете свой
Item
класс или своюCatalog
таблицу, но вы ссылаетесь наInventory
класс, где, возможно, вам следует использоватьItem
класс вместо этого? Я бы переименовал вашAppDataService
интерфейс and на что-то более описательное, напримерInventoryService
.2. Инвентаризация — это объект внутри моей модели. Класс обслуживания передает объект обратно контроллеру, чего я не понимаю, так это как привязать этот объект к модели или преобразовать его в другой объект для передачи информации в представление.
Ответ №1:
На самом базовом уровне вы хотите что-то вроде:
public class HomeController : Controller
{
public ActionResult Index()
{
// Assuming you're not using an IoC container.
AppDataService appDataService = new AppDataService();
Inventory item = appDataService.GetItem("Albatross");
IndexViewModel model =
new IndexViewModel()
{
Name = item.Name
};
return View(model);
}
}
Создайте себе папку с именем /ViewModels/Home
в корне вашего проекта MVC и добавьте класс с именем IndexViewModel
:
public class IndexViewModel
{
public string Name { get; set; }
}
Затем в вашем представлении ( Index.cshtml
):
@model MyNamespaceChangeMe.ViewModels.Home.IndexViewModel
<p>Here's your @Model.Name from the stock room.</p>
Комментарии:
1. Спасибо! Я снова понимаю, что это был очень простой вопрос, но вы понятия не имеете, насколько я ценю ответ! Я применил ваше решение, и оно отлично сработало!