Форум программистов, компьютерный форум, киберфорум
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/95: Рейтинг темы: голосов - 95, средняя оценка - 5.00
 Аватар для Сергей 83
98 / 96 / 15
Регистрация: 28.03.2011
Сообщений: 565

Для новичков в ASP.NET MVC3 (C#)

25.02.2012, 12:57. Показов 21054. Ответов 121
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Научился делать простенькие сайты на платформе MVC 3, с базой данных MS SQL Server 2008.
также немного использовал редактирование Html, CSS, добавление javaScrips.
Обучение мое проходит не без помощи форумов, поэтому решил отдать дань общественности.
Поэтому, товарищи новички, если есть вопросы в рамках и уровня нижеуказанных приложений - задавайте!

Пример приложений: ссылка удалена
 Комментарий модератора 
Запрещено размещать темы для оценки сайтов (форумов) со ссылками на оцениваемый сайт. Для оценки прикрепляйте скриншот сайта.(п.5.15)
1
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.02.2012, 12:57
Ответы с готовыми решениями:

Использование xml файлов для хранения данных в проектах asp.net mvc3
Всем привет, нужно сохранять данные модели не в базе даных а в xml файле, может ктото пробовал подобное - подскажыте как ето правильно...

Не срабатывают атрибуты валидации в EF DB First ASP.NET MVC3
Для валидации полей из класса, сгенерированного мне EF, создаю класс class ProductMetadata { public int...

Есть ли в MVC3 конструктор как в ASP.NET
Есть ли в MVC3(4) конструктор, как в ASP.NET? Чтобы можно было параллельно просматривать изменения на самой страничке, помещать на нее...

121
9 / 9 / 3
Регистрация: 23.02.2013
Сообщений: 51
24.04.2013, 13:08
Студворк — интернет-сервис помощи студентам
Дело в том, что CodeFirst это нечто другое. Оно связано с созданием таблиц в базе, а не с выборкой данных. Вся суть заключается в том, что мы в начале описываем классы, которые отвечают за структуру таблиц и создаем класс-наследник от DbContext. Затем как вариант можно выполнить миграцию, после чего таблицы автоматом создадутся. Чтобы понять получше, почитайте про миграции в entity framework. Так в гугл и забейте
1
Вежливость-главное оружие
 Аватар для some_name
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
24.04.2013, 16:45
Хмммммм, как понял, миграции позволяют рефакторить БД не удаляя ее.

А как мне доставать/записывать данные из базы, только LINQ запросами или же есть все таки аналог?

Заранее спс.

Добавлено через 4 минуты
Просто, я читал на хабре пост, в котором используется LINQ, но в коментах народ писал, что это не есть гуд, если используешь (MVC3-MVC4) + CF. Я поэтому и интересуюсь. С помощью чего тогда данные доставать.
Т.е. какой аналог LINQ для CF.

И если не затруднит, шпульните ссылочкой на дельный туториальчик или какой-нибудь сайт, где можно все это дело основательно освоить.
0
9 / 9 / 3
Регистрация: 23.02.2013
Сообщений: 51
24.04.2013, 17:25
some_name, на счет миграций все верно, но если говорить об CodeFirst, то почитайте тут:
http://habrahabr.ru/post/121132/
И ответьте на вопрос, что вы подразумеваете под CodeFirst и какая его связь с LINQ. По моему статусу вы видите, что я не гуру)) но давайте удостоверимся, что говорим на одном языке.

Добавлено через 1 минуту
На счет справочника. На самом деле, MSDN очень адекватно написан, на мой взгляд. Подробнее сюда: http://msdn.microsoft.com/ru-r... s.98).aspx

Добавлено через 2 минуты
Сам я пользуюсь LINQ-ом, а чем народ мотивировал его нехорошесть?
0
7 / 7 / 5
Регистрация: 15.04.2009
Сообщений: 570
24.04.2013, 18:29
Добрый день
После нажатия на кнопку удалить грида попадаю в метод.
public RedirectToRouteResult AddInspect(string InspectorId, ProductsListViewModel viewModel)
{


return RedirectToAction("ProtComboBox", "Prot1");
}
Потом по этому методу поподаю в Get данного контрола - метод ProtComboBox. И загружается первоначальные данные этой страницы. А мне нужны не первоначальные данные, а те которые получились в методе post. Для этого я сохраняю в Session["vvvv"]= view; А потом в методе Get этого контрола вытаскиваю view из Session И загружаю в методе Get то что достала.
Но мне кажется что это не совсем хорошо так делать. Может существует что-то другое. Как это можно сделать.
Спасибо
0
9 / 9 / 3
Регистрация: 23.02.2013
Сообщений: 51
25.04.2013, 18:39
Всем привет. Разбираюсь с IgnoreRoute(). Код класса следующий:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.IgnoreRoute("Content/{filename}.css");
 
            routes.MapRoute(
                "MyRoute", // Имя маршрута
                "Shampoo", // URL-адрес с параметрами
                new { controller = "Admin", action = "Shampoo" } // Параметры по умолчанию
            );
 
            routes.MapRoute(
                "Default", // Имя маршрута
                "{controller}/{action}/{catId}/{itemId}", // URL-адрес с параметрами
                new { controller = "Home", action = "Index", catId = 0, itemId = 0 } // Параметры по умолчанию
            );
 
        }
Как видно, должны игнорироваться маршруты типа: http://localhost:53967/Content/Site.css - то есть вызов css-файла из директории Content. Но файл все равно открывается. Есть подозрения, что именно в localhost не работает. Или может ошибка где?
Спасибо заранее.
0
Вежливость-главное оружие
 Аватар для some_name
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
25.04.2013, 22:56
Народ, подскажите пожалуйста, где есть пример какого-либо проекта на ASP.NET MVC3 с использованием CF, где демострируется запись данных. Я имею ввиду следующее: Допустим пользователь хочет загрузить mp3 файл на к-л сайт. Он в соответствующем окне выбирает этот файл, жмет загрузить и все. Меня же интересует, как выглядит контроллер, который должен раскидать данные по соответствующим таблицам, т.е., к примеру,
мы имеем следующие две модели
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Track
    {
        public int TrackId { get; set; }
 
        public string Title { get; set; }                               
        public string Path { get; set; }
 
        public string ArtistId { get; set; }
        public Artist Artist { get; set; }
    }     
 
public class Artist
    {
        public int ArtistId { get; set; }
        public string Name { get; set; }
 
        public ICollection<Track> Tracks { get; set; }
    }
}
(ну и соответствующий контекст)
В одну таблицу должо быть записано имя произведения и путь к мп3 файлу, в другую данные об исполнителе.

Шпульните ссылочкой. Только умоляю не отсылайте меня на эти тупые примеры, где создают только модели и данные инициализируют при старте приложения. Мне жизненно необходимо знать, как реализуется контроллеры.

Все заранее огромное спасибо, кто наставит на путь истинный.
0
7 / 7 / 1
Регистрация: 26.04.2013
Сообщений: 34
26.04.2013, 10:06
Есть проблема через RenderAction по Get формируется PartialView c формой для авторизации,
при обработке Post при авторизации происходит редирект, при некоректном вводе отображается Partial без MasterPage,
в чем может быть проблема?

Кстати если форма без параметров т.е. BeginForm(), то все становится наоборот, корректно отображается при неправильном вводе, а при правильном ошибка "Child actions are not allowed to perform redirect actions."

Куда копать?
0
9 / 9 / 3
Регистрация: 23.02.2013
Сообщений: 51
26.04.2013, 19:13
some_name, попробую вам помочь. Я сейчас напишу работающий пример с записью данных. В нем будет производиться запись информации о треке в таблицу БД. Кстати, можно ваши классы разнести в разные файлы, ну по крайней мере, мне я так делаю)) но вам указывать конечно не буду.
Модель Track:
C#
1
2
3
4
5
6
7
8
9
10
public class Track
    {
        public int TrackId { get; set; }
 
        public string Title { get; set; }
        public string Path { get; set; }
 
        public string ArtistId { get; set; }
        //public Artist Artist { get; set; } - я, честно говоря, не совсем понимаю, зачем объект Artist заносить в базу, мы же заносим туда ArtistId, так что в любом случае будем знать, какому артисту принадлежит трек.
    }
Модель TrackContext - тут мы наследуемся от DbContext, чтобы создать соединение с базой и указываем DbSet-свойство, типом которого будет таблица Track:
C#
1
2
3
4
5
6
7
8
public class TrackContext : DbContext
    {
        public TrackContext()
            : base("Tracks")
        {}
 
        public DbSet<Track> tracks { 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
33
34
@using (Html.BeginForm()) {
        @Html.ValidationSummary(true)
        <fieldset>
            <legend>Track</legend>
    
            <div class="editor-label">
                @Html.LabelFor(model => model.Title)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.Title)
                @Html.ValidationMessageFor(model => model.Title)
            </div>
    
            <div class="editor-label">
                @Html.LabelFor(model => model.Path)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.Path)
                @Html.ValidationMessageFor(model => model.Path)
            </div>
    
            <div class="editor-label">
                @Html.LabelFor(model => model.ArtistId)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.ArtistId)
                @Html.ValidationMessageFor(model => model.ArtistId)
            </div>
    
            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>
    }
Контроллер:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public ActionResult Index()
        {
            return View();
        }
 
        [HttpGet]
        public ActionResult AddTrack()
        {
            return View();
        }
 
        [HttpPost]
        public ActionResult AddTrack(Track.Models.Track track) //Сюда передается экземпляр объекта из формы
        {
            TrackContext db = new TrackContext(); // создаем соединение с базой
            db.tracks.Add(track); //добавляем объект track, полученный из формы, в таблицу track
            db.SaveChanges(); // сохраняем данные в базе
            return View("Index");
        }
Вообще, мне кажется, что записывать данные прямо в контроллере не очень хорошо. Я обычно делаю методы внутри классов, которые осуществляют запись, и из контроллера вызываю эти методы. Но для примера пойдет.
Все, что ниже [HttpPost] получит данные из формы и занесет их в таблицу базы.
А теперь вопрос, почему вы думаете, что запись осуществляет процедура CodeFirst? Или я чего-то не догоняю... Насколько я знаю, CodeFirst осуществляет только создание таблиц в базе по имеющимся классам. В данном случае это всего один класс Track и будет создана таблица с полями, соответствующими его свойствам. Все, работа CodeFirst на этом будет закончена. Запись данных осуществляется не с помощью CodeFirst.
А вообще, есть хорошая книга: ASP.NET MVC3 Framework с примерами на C#
Фух, надеюсь, помог
0
Вежливость-главное оружие
 Аватар для some_name
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
27.04.2013, 18:42
Да, помогли. Спасибо.

Цитата Сообщение от Betankor Посмотреть сообщение
записывать данные прямо в контроллере не очень хорошо
Согласен, когда читал инфу, там прямо и указывалось, что это не есть гуд.

Цитата Сообщение от Betankor Посмотреть сообщение
Я обычно делаю методы внутри классов
а что за классы, чай не репозитории? просто встречал много раз, что реализуют интерфейсы для записы в БД


Цитата Сообщение от Betankor Посмотреть сообщение
почему вы думаете, что запись осуществляет процедура CodeFirst?
но ведь вот этот синтаксис: к примеру Artist = db.Artists.Single(a = > a.Name = ="AC/DC"), это же не LINQ. вот я и подумал, что для CF есть какой-то свой синтаксис.

Цитата Сообщение от Betankor Посмотреть сообщение
Запись данных осуществляется не с помощью CodeFirst.
а с помощью чего тогда? хмммм, если не линк, то что?
0
9 / 9 / 3
Регистрация: 23.02.2013
Сообщений: 51
27.04.2013, 19:35
some_name, это:
C#
1
a = > a.Name == "AC/DC"
лямбда выражение: http://msdn.microsoft.com/ru-r... 97687.aspx , а LINQ - это язык запросов аналогичный SQL, но им работать несколько поудобнее.
Цитата Сообщение от some_name Посмотреть сообщение
а с помощью чего тогда? хмммм, если не линк, то что?
CodeFirst != LINQ. Запись и выборка как раз может осуществляться линком, а создание таблиц при помощи CodeFirst.

Цитата Сообщение от some_name Посмотреть сообщение
а что за классы, чай не репозитории? просто встречал много раз, что реализуют интерфейсы для записы в БД
Интерфейсы в C# реализованы как аналог множественного наследования из C++, интерфейс просто предполагает структуру и методы, которые обязательно должен реализовать класс, реализующий этот интерфейс. Если поконкретнее, то я имел ввиду следующее - посмотрите на класс TrackContext. Нам ничто не мешало написать внутри него метод:
C#
1
2
3
4
5
public void SaveTrack(Track track)
        {
            this.tracks.Add(track);
            this.SaveChanges;
        }
А в контроллере вызвать:
C#
1
2
3
4
5
6
7
[HttpPost]
        public ActionResult AddTrack(Track.Models.Track track) //Сюда передается экземпляр объекта из формы
        {
            TrackContext db = new TrackContext();
            db.SaveTrack(track);
            return View("Index");
        }
Примерно так. То есть идея заключается в том, что у вас может в разных методах действия в контроллере производиться запись данных в базу. Чтобы каждый раз все не расписывать, проще сделать в классе-контексте метод для сохранения данных в базе, и им уже в контроллере пользоваться.
0
Вежливость-главное оружие
 Аватар для some_name
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
28.04.2013, 12:52
Спасибо большое, все прояснилось

Добавлено через 29 минут
А хотя не совсем. И все таки, что использовать для записи/считывания из БД?
0
 Аватар для Сергей 83
98 / 96 / 15
Регистрация: 28.03.2011
Сообщений: 565
28.04.2013, 13:03  [ТС]
1. ADO.NET : SQLClient;
2. Entity Fraemwork

- чем не подходит один из этих двух вариантов?
по поводу чего этот диспут тут?
0
Вежливость-главное оружие
 Аватар для some_name
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
28.04.2013, 13:41
А еще нюанс такой. Вот часть контроллера:
C#
1
2
3
4
5
6
7
8
9
var artist = new Artist { Name = _Artist };
           
            db.Artists.Add(artist);
            db.SaveChanges();
 
            var track = new Track { Artist = db.Artists.Single(a => a.Name == _Artist), Title = _Title };             
            db.Tracks.Add(track);
 
            db.SaveChanges();
Как осуществить проверку, что строка, которую я хочу записать в БД уникальна, т.е. еще там нет. А если есть, то не записывать? Извените что мучаю вопросами.

Заранее спс!
Миниатюры
Для новичков в ASP.NET MVC3 (C#)   Для новичков в ASP.NET MVC3 (C#)  
0
9 / 9 / 3
Регистрация: 23.02.2013
Сообщений: 51
28.04.2013, 15:25
some_name, не пользуйтесь var так часто, пишите к примеру: Artist artist = new Artist { Name = _Artist };
Проверить, есть ли запись в базе по-простому можно с помощью метода SingleOrDefault():
C#
1
Track track = db.Artists.SingleOrDefault(p => p.Name == _Artist);
Если ничего не найдет - вернет null, который вы сможете поймать на if. Если найдет, то вернет запись, и трек, соответственно, добавлять нельзя.

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

Добавлено через 45 секунд
Сергей 83, не, диспута нет, просто пытались разобраться))
1
180 / 58 / 7
Регистрация: 28.08.2012
Сообщений: 363
28.04.2013, 21:31
Цитата Сообщение от some_name Посмотреть сообщение
А хотя не совсем. И все таки, что использовать для записи/считывания из БД?
some_name, если у вас есть затруднения насчет работы с БД, типа добавления, считывания, изменения, то проще всего, чтобы получить понимание, как это делать на примере, используйте шаблон формирования представлений (Шаблоны формирования) - он по умолчанию создаст контроллер со всеми действиями, а вы посмотрите как делается, и сделаете по аналогии, конечно, подкорректировав под свою задачу
0
 Аватар для Сергей 83
98 / 96 / 15
Регистрация: 28.03.2011
Сообщений: 565
28.04.2013, 21:34  [ТС]
Цитата Сообщение от quizzer Посмотреть сообщение
если у вас есть затруднения насчет работы с БД
я же рекомендую изучить работу с базой через SQLClient. Этот классический подход даст общее понимание запросов, различных параметров, соединения с базой и прочее.
1
180 / 58 / 7
Регистрация: 28.08.2012
Сообщений: 363
28.04.2013, 21:37
Цитата Сообщение от Сергей 83 Посмотреть сообщение
я же рекомендую изучить работу с базой через SQLClient. Этот классический подход даст общее понимание запросов, различных параметров, соединения с базой и прочее.
Сергей 83, не спорю, присоединяюсь к совету, тем более ничего сложного там нет.
2
Вежливость-главное оружие
 Аватар для some_name
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
29.04.2013, 12:00
Огромное спасибо! Очень помогли!

Добавлено через 12 часов 48 минут
Опача. Опять заморочка. Скажите, если я передаю во вьюху ViewBag.Tracks = db.Tracks.ToList();

Как вместе с этим передать артистов, которые ассоциированы с каждым треком;

ViewBag.Tracks = db.Tracks.Include( a => a.Artist ); это код не пашет почему-то.

я его вот здесь подсмотрел http://metanit.com/sharp/mvc/5.6.php.
0
180 / 58 / 7
Регистрация: 28.08.2012
Сообщений: 363
29.04.2013, 12:12
some_name, должно работать, что именно не работает - данные не передаются в представление?
На всякий случай приведите код моделей, которые вы используете
0
9 / 9 / 3
Регистрация: 23.02.2013
Сообщений: 51
29.04.2013, 12:32
some_name, ну по идее, если у вас треки и артисты в разных таблицах, то артистов тоже вытащить надо в другой ViewBag. А вообще да, лучше на модели глянуть.

Добавлено через 7 минут
Или смотрите, вы этой записью вытащили треки. Теперь аналогичной записью вытащите артистов. У вас есть ArtistId у каждого артиста и каждого трека. Если передадите обе коллекции в представление то там можно сделать два цикла foreach один в другом, к примеру, и вывести всех артистов с привязаными к ним треками. Типа того.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.04.2013, 12:32

asp.net для новичков
Доброго времени суток! У меня такой вопрос, что можете посоветовать почитать для ознакомления с АСП.НЕТ 4.0 для новичков? интернет...

Учебник по ASP для новичков
Ребята помогите! Я решил заняться АСП, но никак не могу достать учебник для новичка (полного ламера в этой сфере)! Если у кого-то есть...

При создании проекта ASP.NET Aplicetion выскакивает сообщение Web server is not running ASP/NET version 1.1
При создании проекта ASP.NET Aplicetion выскакивает сообщение Web server is not running ASP/NET version 1.1 хотя все запущено,...

Client ASP.NET MVC + Angular и Server side ASP.NET WEB.API
Доброго времени суток! Не первый день бьюсь над задачей, не могу понять в чем причина. Хочу создать почти HelloWorld решение, для...

ASP.NET MVC 4,ASP.NET MVC 4.5 и ASP.NET MVC 5 большая ли разница между ними?
Начал во всю осваивать технологию,теперь хочу с книжкой посидеть и вдумчиво перебрать всё то что увидел,услышал и набил...в общем какую...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
100
Ответ Создать тему
Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru