Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / controller join table / 21 сообщений из 21, страница 1 из 1
27.11.2013, 16:23
    #38480194
kim-kong
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
controller join table
Есть 2 таблицы: заказы и клиенты. В заказах ClientId - FK на клиентов. Хочу чтобы во вьюхе Заказов был не ClietnId, а Name из Clients, а при создании нового заказа был DropDown с именами клиентов. Пытаюсь в контроллере объединить таблицы по id вот так, но не понимаю что писать во вью.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
        public ActionResult Orders()
        {
            var viewModel = 
                (from pd in db.Orders
                join p in db.Clients on pd.ClientId equals p.Id
                where pd.ClientId == p.Id select pd).ToList();
            return View(viewModel);
        }



Контроллер для создания заказов

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
public ActionResult CreateOrder()
        {
            Order order = new Order();
            return View(order);
        }

        [HttpPost]
        public ActionResult CreateOrder(Order order)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    db.Orders.Add(order);
                    db.SaveChanges();
                    return RedirectToAction("Orders");
                }
            }
            catch (Exception ex)
            {
                ModelState.AddModelError(String.Empty, ex);
            }
            return View(order);
        }
...
Рейтинг: 0 / 0
27.11.2013, 16:27
    #38480203
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
controller join table
оффтопя надеюсь Вы уже обсудили с тем, кто Вам задачу поставил,
что должно отображаться в заказе если допустим свойства клиента изменились
...
Рейтинг: 0 / 0
27.11.2013, 16:39
    #38480226
kim-kong
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
controller join table
Паганель,

В чем проблема ? Редактировать клиента можно спокойно, есть же id, а при попытке удалить вылезет ошибка.
...
Рейтинг: 0 / 0
27.11.2013, 16:49
    #38480252
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
controller join table
kim-kongПаганель,

В чем проблема ? Редактировать клиента можно спокойно, есть же id, а при попытке удалить вылезет ошибка.
я не про редактирование а про то что должно в заказе оказаться после редактирования.
хотя конечно это не про вновь создаваемый заказ, а про уже существующий(е), потому и оффтоп

да ладно. не обсудили значит так надо, не буду спорить
...
Рейтинг: 0 / 0
27.11.2013, 17:01
    #38480269
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
controller join table
kim-kong,
сделать вью модель для списка заказов, в чем проблема?
Код: c#
1.
2.
3.
4.
5.
6.
  var viewModel = 
                (from pd in db.Orders
                join p in db.Clients on pd.ClientId equals p.Id
                where pd.ClientId == p.Id select new ModelName{
                ...fileds....
                ClientName=p.Name}).ToList();


п.с. судя по всему, может ошибаюсь, у вас контекст общий на контролер, глупо но можно и ленивой загрузкой подцепить
...
Рейтинг: 0 / 0
27.11.2013, 18:13
    #38480376
kim-kong
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
controller join table
handmadeFromRu,

Что писать внутри new ModelName ?

Во во вью пишу вот так

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
@{
    var grid = new WebGrid(
        Model,rowsPerPage:5,
        defaultSort:"Name",
        columnNames:new [] {"Name", "ShipDate", "Article"}
        );
}

@grid.GetHtml(

fillEmptyRows:false,
mode:WebGridPagerModes.All,

columns:grid.Columns
(
grid.Column("Name", header:"Клиент"),
grid.Column("ShipDate", header:"Дата"),
grid.Column("Article", header:"Артикул")
)
)
...
Рейтинг: 0 / 0
27.11.2013, 19:03
    #38480487
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
controller join table
kim-kong,

эм что значит что писать? новую модель и замапить поля.
...
Рейтинг: 0 / 0
28.11.2013, 13:57
    #38481723
kim-kong
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
controller join table
handmadeFromRu,

Спасибо, все получилось. Теперь другой вопрос, как сделать DropDown в Create ? Мне нужно новый класс создавать или править свою модель ?
...
Рейтинг: 0 / 0
28.11.2013, 14:05
    #38481748
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
controller join table
ну самый простой вариант прокинуть во ViewBag
Код: c#
1.
2.
3.
ViewBag.SomeId = new SelectList(db.Some.Select(x=>new {x.Is, x.InternalName.}), "Id", "Name");

@Html.DropDownList("SomeId", String.Empty)


а так еще есть варианты. на stackoverflow море тем про DropDown
...
Рейтинг: 0 / 0
28.11.2013, 18:11
    #38482294
kim-kong
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
controller join table
handmadeFromRu,

Пробую сделать вот так:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
        public ActionResult CreateOrder()
        {
            ViewBag.Client = new SelectList(db.Clients, "Id", "Name");
            return View();
        }

        [HttpPost]
        public ActionResult CreateOrder(Order order)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    db.Orders.Add(order);
                    db.SaveChanges();
                    return RedirectToAction("Orders");
                }
            }
            catch (Exception ex)
            {
                ModelState.AddModelError(String.Empty, ex);
            }
            return View(order);
        }



Код: html
1.
2.
            @Html.DropDownList("Client", (IEnumerable<SelectListItem>) ViewBag.Client, "--Выберите клиента--")
            @Html.ValidationMessageFor(model => model.ClientId)



Но ошибка:
Нет элемента ViewData типа "IEnumerable<SelectListItem>", который имеет ключ "Client".
...
Рейтинг: 0 / 0
28.11.2013, 18:17
    #38482309
kim-kong
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
controller join table
kim-kong,

Сори, поправил вью и все работает, огромное спасибо

Код: html
1.
2.
            @Html.DropDownList("ClientId", (IEnumerable<SelectListItem>) ViewBag.Client, "--Выберите клиента--")
            @Html.ValidationMessageFor(model => model.ClientId)
...
Рейтинг: 0 / 0
28.11.2013, 21:53
    #38482577
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
controller join table
kim-kong,

внимательно посмотри) я ключ во вьюбаг обозвал по ключу связки, дальше магия мвц)

ViewBag.ClientId = new SelectList(db.Clients, "Id", "Name");

и потом во вью просто

@Html.DropDownList("ClientId", String.Empty)
...
Рейтинг: 0 / 0
29.11.2013, 19:57
    #38484048
kim-kong
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
controller join table
handmadeFromRu,

В Deatails такая штука с new ModelList не пройдет ?
...
Рейтинг: 0 / 0
02.12.2013, 03:34
    #38485399
kim-kong
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
controller join table
handmadeFromRu,

Сделал еще один контроллер

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
        public ActionResult IngList()
        {
            var viewModel =
                (from il in db.IngLists
                 join p in db.Products on il.ProdId equals p.Id
                 join ing in db.Ingredients on il.IngId equals ing.Id
                 where (il.ProdId == p.Id) && (il.IngId == ing.Id)
                 select new IngListModel { p.Name, ing.Name, il.Amount }).ToList();
            return View(viewModel);
        }



Ошибка 1 Не удается инициализировать "EnzoApp.Controllers.IngListModel" с инициализатором коллекции, так как он не реализует "System.Collections.IEnumerable" C:\Users\Kim-Kong\Documents\Visual Studio 2012\Projects\EnzoApp\EnzoApp\Controllers\HomeController.cs 248 42 EnzoApp
...
Рейтинг: 0 / 0
02.12.2013, 09:04
    #38485489
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
controller join table
присвоение полям модели где?
...
Рейтинг: 0 / 0
02.12.2013, 09:06
    #38485493
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
controller join table
да и модель покажите + вьюху
...
Рейтинг: 0 / 0
02.12.2013, 12:35
    #38485785
kim-kong
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
controller join table
handmadeFromRu,

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
namespace EnzoApp.Controllers
{
    class IngListModel
    {
        public string ProdName { get; set; }
        public string IngName { get; set; }
        public int Amount { get; set; }
    }
}



Так это, вьюхи нет, а ошибка есть.
...
Рейтинг: 0 / 0
02.12.2013, 12:38
    #38485796
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
controller join table
Эм а где вот такое:
Код: c#
1.
2.
...
select new IngListModel {ProdName = p.Name, IngName =ing.Name,Amount = il.Amount}).ToList();
...
Рейтинг: 0 / 0
02.12.2013, 12:45
    #38485815
kim-kong
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
controller join table
handmadeFromRu,

Да, забыл присвоить, теперь все выглядит вот так

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
        public ActionResult IngList()
        {
            var viewModel =
                (from il in db.IngLists
                 join p in db.Products on il.ProdId equals p.Id
                 join ing in db.Ingredients on il.IngId equals ing.Id
                 where (il.ProdId == p.Id) && (il.IngId == ing.Id)
                 select new IngListModel { ProdName = p.Name, IngName = ing.Name, Amount = il.Amount }).ToList();
            return View(viewModel);
        }



Мне интересно, почему строго типизированные вью исчезли.
...
Рейтинг: 0 / 0
02.12.2013, 12:51
    #38485827
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
controller join table
public class IngListModel не?
...
Рейтинг: 0 / 0
02.12.2013, 13:26
    #38485902
kim-kong
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
controller join table
handmadeFromRu,

Точно, совсем забыл. Еще раз спасибо.
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / controller join table / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]