Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Хочу через ViewBag передать данные во View, но просят привязать источник данных. / 25 сообщений из 80, страница 1 из 4
16.01.2014, 03:06
    #38527692
kim-kong
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу через ViewBag передать данные во View, но просят привязать источник данных.
Хочу через ViewBag передать данные в View (в похожей проге писал 1х1 и все работало), но на этот раз, когда я заполняю поля и нажимаю submit, меня просят привязать данные:
System.InvalidOperationException: Прежде чем может быть выполнена эта операция, должен быть привязан источник данных.
Заранее извиняюсь за русскую студию.

Модель, контроллер, вью:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
    public class IngListModel
    {
        public int IngListId { get; set; }
        public int ProdId { get; set; }
        public int IngId { get; set; }
        public string ProdName { get; set; }
        public string IngName { get; set; }
        public float Amount { get; set; }
    }



Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
        public ActionResult IngList1(int id)
        {
            ViewBag.Ingredient = new SelectList(db.Goods, "Id", "Name");
            ViewBag.Product = new SelectList(db.Products, "Id", "Name");
            ViewBag.Name = from a in db.Products where a.Id == id select a.Name;
            ViewBag.viewModel =
                (from il in db.IngLists
                 join p in db.Products on il.ProdId equals p.Id
                 join g in db.Goods on il.GoodId equals g.Id
                 where (il.ProdId == id) && (il.GoodId == g.Id)
                 select new IngListModel { IngListId = il.Id, ProdId = p.Id, ProdName = p.Name, IngName = g.Name, Amount = il.amount }).ToList();
            return View();
        }

        [HttpPost]
        public ActionResult IngList1(IngList inglist)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    db.IngLists.Add(inglist);
                    db.SaveChanges();
                    return RedirectToAction("IngList1");
                }
            }
            catch (Exception ex)
            {
                ModelState.AddModelError(String.Empty, ex);
            }
            return View();
        }



Код: html
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.
@{
    ViewBag.Title = "IngList1";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>@Html.Display("Name")</h2>
<br>
@{
    var grid = new WebGrid(ViewBag.viewModel,
        rowsPerPage: 10,
        defaultSort:"ProdName",
        columnNames:new [] {"IngName", "Amount"}
        );
}

@grid.GetHtml(

fillEmptyRows:false,
mode:WebGridPagerModes.All,

columns:grid.Columns
(
grid.Column("IngName", header:"Сырье"),
grid.Column("Amount", header:"Кг"),
grid.Column("", header:"", format: @<text>@Html.ActionLink("Удалить", "DeleteIngList", new { id = item.IngListId }, new { @class = "btn btn-success" })</text>)
)
)

@model EnzoApp.Models.IngList
<h2>Добавить ингредиент</h2>

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>IngList</legend>

        <div class="editor-field">
            @Html.DropDownList("ProdId", (IEnumerable<SelectListItem>) ViewBag.Product, "--Выберите продукт--", new { @style = "width: 300px;" })
            @Html.ValidationMessageFor(model => model.ProdId)
        </div>

        <div class="editor-field">
            @Html.DropDownList("IngId", (IEnumerable<SelectListItem>) ViewBag.Ingredient, "--Выберите сырье--", new { @style = "width: 300px;" })
            @Html.ValidationMessageFor(model => model.GoodId)
        </div>

        <div class="editor-label">
            Количество
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.amount, new { @style = "width: 270px;" })
            @Html.ValidationMessageFor(model => model.amount)
        </div>

        <p>
            <input type="submit" value="Добавить" />
        </p>
    </fieldset>
}

<div>
    @Html.ActionLink("Назад", "Products1")
</div>
...
Рейтинг: 0 / 0
27.01.2014, 13:15
    #38538879
kim-kong
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу через ViewBag передать данные во View, но просят привязать источник данных.
kim-kong,

Вбил данные в БД вручную, grid рабочий, значит я криво ввожу данные.
...
Рейтинг: 0 / 0
27.01.2014, 13:28
    #38538899
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу через ViewBag передать данные во View, но просят привязать источник данных.
ViewBag зло
...
Рейтинг: 0 / 0
27.01.2014, 14:44
    #38539063
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу через ViewBag передать данные во View, но просят привязать источник данных.
МСУViewBag зло

для DropDownList и прочих таких штук, ViewBag -- то што надо
...
Рейтинг: 0 / 0
27.01.2014, 14:52
    #38539078
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу через ViewBag передать данные во View, но просят привязать источник данных.
hVosttМСУViewBag зло

для DropDownList и прочих таких штук, ViewBag -- то што надо

Ты чё там куришь, злыдень?
...
Рейтинг: 0 / 0
27.01.2014, 15:07
    #38539111
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу через ViewBag передать данные во View, но просят привязать источник данных.
МСУТы чё там куришь, злыдень?

я те серьёзна говорю, если затолкать IEnumerable<SelectListItem> во ViewData/Bag с ключом поля, то он отрендерится в DropDownList:

Код: c#
1.
2.
3.
4.
5.
6.
7.
// где-то в фильтре или контроллере:

ViewBag.CategoryId = new SelectList(categories, "Id", "Name");

// потом во вью:

@Html.DropDownList("CategoryId");
...
Рейтинг: 0 / 0
27.01.2014, 15:10
    #38539119
carrotik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу через ViewBag передать данные во View, но просят привязать источник данных.
Mike Wasson говорит, что Razor - отстой, Knockout через JSON рулит ... :)
...
Рейтинг: 0 / 0
27.01.2014, 15:13
    #38539127
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу через ViewBag передать данные во View, но просят привязать источник данных.
carrotikMike Wasson говорит, что Razor - отстой, Knockout через JSON рулит ... :)

это он говорит:

http://mikewasson.com/

?
...
Рейтинг: 0 / 0
27.01.2014, 15:15
    #38539133
kim-kong
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу через ViewBag передать данные во View, но просят привязать источник данных.
МСУ,

Если есть предложение лучше - вперед.
...
Рейтинг: 0 / 0
27.01.2014, 15:40
    #38539179
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу через ViewBag передать данные во View, но просят привязать источник данных.
имхо согласен с hVostt, чтоб не засорять целевую модель бесполезными списками
...
Рейтинг: 0 / 0
27.01.2014, 15:44
    #38539188
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу через ViewBag передать данные во View, но просят привязать источник данных.
hVosttМСУТы чё там куришь, злыдень?

я те серьёзна говорю, если затолкать IEnumerable<SelectListItem> во ViewData/Bag с ключом поля, то он отрендерится в DropDownList:

Код: c#
1.
2.
3.
4.
5.
6.
7.
// где-то в фильтре или контроллере:

ViewBag.CategoryId = new SelectList(categories, "Id", "Name");

// потом во вью:

@Html.DropDownList("CategoryId");



Уволить без выплаты материального пособия.

http://codearticles.ru/articles/764

handmadeFromRuимхо согласен с hVostt, чтоб не засорять целевую модель бесполезными списками
-1
...
Рейтинг: 0 / 0
27.01.2014, 16:01
    #38539231
eJack
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу через ViewBag передать данные во View, но просят привязать источник данных.
МСУhVosttпропущено...


я те серьёзна говорю, если затолкать IEnumerable<SelectListItem> во ViewData/Bag с ключом поля, то он отрендерится в DropDownList:

Код: c#
1.
2.
3.
4.
5.
6.
7.
// где-то в фильтре или контроллере:

ViewBag.CategoryId = new SelectList(categories, "Id", "Name");

// потом во вью:

@Html.DropDownList("CategoryId");



Уволить без выплаты материального пособия.

http://codearticles.ru/articles/764

handmadeFromRuимхо согласен с hVostt, чтоб не засорять целевую модель бесполезными списками
-1

+100500

Особенно если таких выпадающих списков на форме много, замучаешься ViewBag писать сначала в методе контроллера, а потом в разметке.

View должен отображать жанные из одного места - из модели. При подходе
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
 ViewBag.Ingredient = new SelectList(db.Goods, "Id", "Name");
            ViewBag.Product = new SelectList(db.Products, "Id", "Name");
            ViewBag.Name = from a in db.Products where a.Id == id select a.Name;
            ViewBag.viewModel =
                (from il in db.IngLists
                 join p in db.Products on il.ProdId equals p.Id
                 join g in db.Goods on il.GoodId equals g.Id
                 where (il.ProdId == id) && (il.GoodId == g.Id)
                 select new IngListModel { IngListId = il.Id, ProdId = p.Id, ProdName = p.Name, IngName = g.Name, Amount = il.amount }).ToList();



вы получаете не формируете целостную модель, это просто данные полученные разными запросами, без каких либо зависимостей.
...
Рейтинг: 0 / 0
27.01.2014, 16:10
    #38539254
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу через ViewBag передать данные во View, но просят привязать источник данных.
eJack,
и? поля просто висят и просто заполняются и никакой нагрузки смысловой не несут.

МСУ я раньше также в модель прокидывал, но надоело. Ощущение искусственности
...
Рейтинг: 0 / 0
27.01.2014, 16:26
    #38539300
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу через ViewBag передать данные во View, но просят привязать источник данных.
handmadeFromRuМСУ я раньше также в модель прокидывал, но надоело. Ощущение искусственности
Что значит надоело? Модель представления - это описание представления, чем "типизированнее" она будет, тем в будущем будет легче сопровождать такое решение, тестировать и вносить изменения. Залипушки на вьюбэгах - это шаг в пропасть , на странице из одного комбобокса это еще не страшно, на страницах с множеством контролов - это просто хаос.
...
Рейтинг: 0 / 0
27.01.2014, 16:45
    #38539345
eJack
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу через ViewBag передать данные во View, но просят привязать источник данных.
handmadeFromRueJack,
и? поля просто висят и просто заполняются и никакой нагрузки смысловой не несут.

МСУ я раньше также в модель прокидывал, но надоело. Ощущение искусственности

А что и? У вас нет понимания архитектуры решения, таких разработчиков, которым надоело писать нормально сопровождаемый код, я увольняю. Как тимлидер.
...
Рейтинг: 0 / 0
27.01.2014, 16:50
    #38539351
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу через ViewBag передать данные во View, но просят привязать источник данных.
eJackhandmadeFromRueJack,
и? поля просто висят и просто заполняются и никакой нагрузки смысловой не несут.

МСУ я раньше также в модель прокидывал, но надоело. Ощущение искусственности

А что и? У вас нет понимания архитектуры решения, таких разработчиков, которым надоело писать нормально сопровождаемый код, я увольняю. Как тимлидер.
+1, если желание писать красиво и правильно пропадает, лучше валить из разработки на пастбище, увеличивать надои страны.
...
Рейтинг: 0 / 0
27.01.2014, 16:51
    #38539353
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу через ViewBag передать данные во View, но просят привязать источник данных.
МСУЧто значит надоело? Модель представления - это описание представления, чем "типизированнее" она будет, тем в будущем будет легче сопровождать такое решение, тестировать и вносить изменения. Залипушки на вьюбэгах - это шаг в пропасть , на странице из одного комбобокса это еще не страшно, на страницах с множеством контролов - это просто хаос.

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

вот это:

Код: c#
1.
2.
3.
4.
5.
6.
7.
@Html.DropDownListFor(model =>
    model.SelectedID,
    Model.Items.Select(d => new SelectListItem { Value = d.ID.ToString(), Text = d.Text })
)

public List<MyDto> Items { get; set; }
public string SelectedID { get; set; }



обсолютно неюзабельная вафля, не годится даже в качестве примеров для учебников.
...
Рейтинг: 0 / 0
27.01.2014, 16:53
    #38539357
kim-kong
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу через ViewBag передать данные во View, но просят привязать источник данных.
МСУ,

У меня не такое масштабное приложение, чтобы об этом задумываться, вьюбаг хорошо зашел.
...
Рейтинг: 0 / 0
27.01.2014, 16:54
    #38539361
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу через ViewBag передать данные во View, но просят привязать источник данных.
МСУ,
ну как те сказать. я не вижу разницы просто: что я прокидываю коллекции через модель для биндинга дропдаунов что через ViewBag . Тестам это не мешает так как на входе модель, тупо id-ники выбранных элементов. Эти искусственные коллекции не несут какой то логики кроме как забиндить список и все. Ты еще скажи ты title и meta без ViewBag прокидываешь. Это чисто мои ощущения даже с большим кол-во контролов, конечно будет фейл если имена переменных во ViewBag пересекутся или поле ключа переименовали. и МСУ давай без твоих шуточек про стадо и прочее. я тебе свои аргументы ты мне свои. а какашками все умеют кидаться.

eJack
в чем нормальность? прокинули коллекцию Id-Name без какой либо смысловой нагрузки? по вашему я не смогу тестами покрыть это дело?
...
Рейтинг: 0 / 0
27.01.2014, 16:55
    #38539362
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу через ViewBag передать данные во View, но просят привязать источник данных.
eJackhandmadeFromRueJack,
и? поля просто висят и просто заполняются и никакой нагрузки смысловой не несут.

МСУ я раньше также в модель прокидывал, но надоело. Ощущение искусственности

А что и? У вас нет понимания архитектуры решения, таких разработчиков, которым надоело писать нормально сопровождаемый код, я увольняю. Как тимлидер.
+1, если желание писать красиво и правильно пропадает, лучше валить из разработки на пастбище, увеличивать надои страны.
...
Рейтинг: 0 / 0
27.01.2014, 17:10
    #38539395
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу через ViewBag передать данные во View, но просят привязать источник данных.
eJackОсобенно если таких выпадающих списков на форме много, замучаешься ViewBag писать сначала в методе контроллера, а потом в разметке.

View должен отображать жанные из одного места - из модели.


понятие "декомпозиция" вам о чём-нибудь говорит? данные для выпадающего списка прибивать гвоздями к вью модели -- практика однозначно плохая и неэффективная.
...
Рейтинг: 0 / 0
27.01.2014, 17:11
    #38539399
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу через ViewBag передать данные во View, но просят привязать источник данных.
eJack,
целевую модель никто не пихает во вьюбег, а если смотреть ваш примеру - вы имели ввиду это, только вспомогательные списки.
...
Рейтинг: 0 / 0
27.01.2014, 17:14
    #38539403
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу через ViewBag передать данные во View, но просят привязать источник данных.
hVosttтипизированная модель представления -- очень хорошо. но отказываться от вьюбэга при этом глупо.
Так а зачем он мне нужен, если мои задачи покрываются полной типизацией?

hVosttпример с DropDownList -- тот случай, когда ViewBag использовать нужно.
Пример с DropDownList -- тот случай, когда ViewBag использовать не нужно.

hVosttвот это:

Код: c#
1.
2.
3.
4.
5.
6.
7.
@Html.DropDownListFor(model =>
    model.SelectedID,
    Model.Items.Select(d => new SelectListItem { Value = d.ID.ToString(), Text = d.Text })
)

public List<MyDto> Items { get; set; }
public string SelectedID { get; set; }



обсолютно неюзабельная вафля, не годится даже в качестве примеров для учебников.
Я не собираюсь тебя уговаривать писать правильный код.

handmadeFromRuМСУ,
ну как те сказать. я не вижу разницы просто: что я прокидываю коллекции через модель для биндинга дропдаунов что через ViewBag .
Не видишь разницу между типизируемым тестируемым кодом и гавнокодом с вью баг? Ну извини, мне тут нечего сказать. Это как использовать DataTable и ORM.

handmadeFromRuТестам это не мешает так как на входе модель, тупо id-ники выбранных элементов. Эти искусственные коллекции не несут какой то логики кроме как забиндить список и все. Ты еще скажи ты title и meta без ViewBag прокидываешь. Это чисто мои ощущения даже с большим кол-во контролов, конечно будет фейл если имена переменных во ViewBag пересекутся или поле ключа переименовали. и МСУ давай без твоих шуточек про стадо и прочее. я тебе свои аргументы ты мне свои. а какашками все умеют кидаться.
Это не искуственные коллекции, это описание представления. Они нужны всегда и везде. Даже в том же MVVM подходе ты точно так же описываешь свою коллекцию и SelectedId и намапливаешь в XAML. А ViewBag я бы вообще запретил бы в MVC.
...
Рейтинг: 0 / 0
27.01.2014, 17:16
    #38539408
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу через ViewBag передать данные во View, но просят привязать источник данных.
hVostteJack
понятие "декомпозиция" вам о чём-нибудь говорит?
Декомпозиция головного мозга?

hVosttданные для выпадающего списка прибивать гвоздями к вью модели -- практика однозначно плохая и неэффективная.
Любые данные (а не только выпадающего списка) нужно прибивать гвоздями к вью модели. На то она и вью модель.
...
Рейтинг: 0 / 0
27.01.2014, 17:44
    #38539491
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу через ViewBag передать данные во View, но просят привязать источник данных.
МСУЭто не искуственные коллекции, это описание представления. Они нужны всегда и везде. Даже в том же MVVM подходе ты точно так же описываешь свою коллекцию и SelectedId и намапливаешь в XAML.
вот тут ты меня переубедил.
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Хочу через ViewBag передать данные во View, но просят привязать источник данных. / 25 сообщений из 80, страница 1 из 4
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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