Перейти к публикации
  • Сейчас на странице   Всего пользователей: 0   (0 пользователей, 0 гостей)

Rooster

Программирование, т. 7

  

536 пользователей проголосовало

У вас нет прав на голосование в этом опросе, или на просмотр результатов опроса. Пожалуйста, войдите или зарегистрируйтесь для голосования в опросе.

Рекомендованные сообщения

(изменено)

        public ActionResult AddUser()
        {
            return View();
        }
        [HttpPost]
        public ActionResult AddUser(User adduser)
        {
            db.Users.Add(adduser);
            db.SaveChanges();
            return RedirectToAction("UserList", "Home");
        }

Когда мне нужно было делать, то делал вот так.

В представлении

@model IEnumerable<ATM.Models.User>

У всех полей в форме были нужные атрибуты name и все значения благополучно записывались в модель User

В контролере в пост запросе просто добавлял в базу и сохранял изменения

Я думаю, что ты найдешь многие ответы на свои вопросы вот здесь

https://metanit.com/sharp/mvc5/


Изменено пользователем banale*

Поделиться сообщением


Ссылка на сообщение

у тебя должно быть 2 метода, один не принимает ничего, заполняет вьюбэг и показывает твою вьюшку текущую.

и второй который ловит POST от кнопки сабмит, создает машину, заполняет в ней поля на основе того, что в посте пришло и потом сохраняет в базу

 

у тебя же в скинутом коде вообще всё сразу, странно было бы, если бы оно сработало

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

 

Я вспомнил. Я удалил [HttpPost] потому что иначе у меня почему то вылезала ошибка 404 при вызове этого метода в браузере. втф?

 

 

return RedirectToAction("UserList", "Home");
 

у меня почему то сразу редиректило на страницу указанную страницу. как так?

Поделиться сообщением


Ссылка на сообщение

потому что один должен быть с гетом, второй с постом

показать форму для создания машины и сохранить на сервере выбранные данные это 2 разных метода

если он у тебя всего 1 и на нем висит пост, асп тебе и доступ туда не дает, всё верно

 

 

вон сверху примерный вариант


Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение

Это редирект на другую страницу (представление)

Поделиться сообщением


Ссылка на сообщение

потому что один должен быть с гетом, второй с постом

показать форму для создания машины и сохранить на сервере выбранные данные это 2 разных метода

если он у тебя всего 1 и на нем висит пост, асп тебе и доступ туда не дает, всё верно

 

 

вон сверху примерный вариант

 

ну сейчас так и есть и один хуй

скину весь код на всякий случай

 

 

using Showroom.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace Showroom.Controllers
{
    [Authorize(Roles ="admin")]
    public class AddCarController : Controller
    {
        CarContext db = new CarContext();
        // GET: AddCar

        [HttpGet]
        public ActionResult Index()
        {
            IEnumerable<Car> car = db.Cars; IEnumerable<CarFirm> carFirm = db.CarFirms;
            IEnumerable<CarModel> carModel = db.CarModels;
            IEnumerable<CarBody> carBody = db.CarBodies;
            ViewBag.CarFirm = carFirm;
            ViewBag.CarModel = carModel;
            ViewBag.CarBody = carBody;
            ViewBag.Cars = car;
            return View();
        }

        [HttpPost]
        public ActionResult Create(Car car) 
        {
            db.Cars.Add(car);
            db.SaveChanges();
            return View();
        }
    }
}

 

 

Это редирект на другую страницу (представление)

 

это я знаю. я имею ввиду что когда нажимаю кнопку перехода на действие Create, меня сразу возвращает на Index и таблица заполняется нулями.

Поделиться сообщением


Ссылка на сообщение

я короче ещё понял как вас доебать. Подскажите, пожалуйста, с вашей точки зрения, какой исходный код какой-нибудь программы на python можно было бы изучить в первую очередь? Может есть что-то популярное, востребованное, чтобы открыть и понять, научился ли я чему-то, понимаю ли я хотя бы какой-то процент, разбирать непонятки в конце концов


.

Поделиться сообщением


Ссылка на сообщение
(изменено)

я короче ещё понял как вас доебать. Подскажите, пожалуйста, с вашей точки зрения, какой исходный код какой-нибудь программы на python можно было бы изучить в первую очередь? Может есть что-то популярное, востребованное, чтобы открыть и понять, научился ли я чему-то, понимаю ли я хотя бы какой-то процент, разбирать непонятки в конце концов

 

По моему выше уже советовали Django


Изменено пользователем Vova

towBCf6.pngimage.png.6f88ac9ad688355eb803ba0b32e309ca.pngimage.png.c05354238865437022b3e4a97a835dbd.pngimage.png.0e8329f2b07e208ae8ef4e3f6878d126.png

 

 

 

Поделиться сообщением


Ссылка на сообщение

если ты хочешь тащить просто фирмы, так и тащи из той коллекции, что EF сгенерил для таблицы

типа

using (var context = new .......)

{

return context.CarFirms.ToList()

}

 

если ты хочешь достать фирму для конкретной машины, так в твоей машине должно быть свойство типа

using (var context = new .......)

{

return context.Cars.Where(c => c.ID = randomcarid).Select(c => c.CarFirm).FirstOrDefault();

}

а ты решарпером пользуешься?

мне просто кажется, что он бы подсказал переделать в .FirstOrDefault(c => c.ID = randomcarid).CarFirm


Колы я выросту - то хочу буты такым як я

5c8bbc85b99e.gif

 

годные смайлы

Поделиться сообщением


Ссылка на сообщение

к несчастью в редакторе постов на пд нет решарпера omegalul

 

а так нет, не пройдет, у тебя нуллреференс может вылететь, у меня нет

 

уже тогда хотя бы  .FirstOrDefault(c => c.ID = randomcarid)?.CarFirm, если шарп 7 или какой там

 

 

хотя это всё равно разные запросы будут, тк First().CarFirm вернет нулл всегда, тк загрузка ленивая, а инклюдов в запросе не было. А с прямо указанным селектом EF вытащит именно сам CarFirm, если найдет машину по айди


Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение

всё так. решарпер мне и это бы подсказал :)

просто со временем уже сам привыкаешь писать как надо. 

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


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

даже если фирма - это отдельная таблица и включена ленивая подгрузка - мой запрос отработает как надо


Колы я выросту - то хочу буты такым як я

5c8bbc85b99e.gif

 

годные смайлы

Поделиться сообщением


Ссылка на сообщение

Ну я тоже с EF уже давно ничего не делал, мы переехали на самописную ОРМку которая под него мимикрирует немного, плюс допфичи всякие.

Но по крайней мере тот, с которого мы начинали, вроде 4, никогда тебе не вернет данные, пока ты их не загрузишь.

То есть либо инклюд, либо CarFirm будет нулл, даже при открытом контексте, пока ты не вызовешь у спец свойства сгенеренного EF CarFirmReference метод Load. У него же есть еще и свойство IsLoaded.

При уже закрытом контексте метод загрузки просто исключение кинет.


Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение

я не уверен, какой там режим по умолчанию, но мне кажется, что жадный.

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

мой запрос явно указывает что надо из базы достать он это достанет


ну и на сколько я понимаю оно бы могло так себя вести, как ты описал, если бы ты сделал бы сначала

var selectedCars = cars.Select(x => x.Id = givenId).AsEnumerable();

а потом 

var carCompany = car.FIrstOrDefault()?.CarCompany.

т.к. IQueriable запускается на FirstOrDefault или вообще на обращение к полям.

И отличие жадного от ленивого будет только в том, что в жадном оно сразу закверяет энтити Car и все связанные, а в ленивом закверяет Car, а при обращении к связанным энтитям закверяет их, что порождает N+1 проблему без инклуда. В данном же случае у тебя скорее всего скомпилится кверя, которая вернет только компанию не зависимо от настроек


Колы я выросту - то хочу буты такым як я

5c8bbc85b99e.gif

 

годные смайлы

Поделиться сообщением


Ссылка на сообщение

IQueryable лишь дает тебе не исполнять запрос до First(), он никоим образом не относится к ленивости или жадности подгрузки связей. Ими управляют только инклюды, либо сам запрос, ведь он как минимум всегда вытаскивает то, что у тебя в селекте написано (ну или объекты изначальной коллекции с которой ты стратовал)

 

ну и я не знаю дефолт EF по загрузке связей, но он явно должен быть ленивым, тк в любом проекте отличном от 3 тестовых таблиц, у тебя связями будет покрыто всё или почти всё. И загрузка какой-нибудь ссаной одной машины в итоге вытащит пол базы. Я не знаю, для чего жадную загрузку вообще делали.


Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение
(изменено)

чувак. ленивость - это как раз то, что ты из базы не грузишь что-то пока не используешь это.

в случае с тем запросом там когда у тебя компилится запрос ты уже обращаешься к этому и оно загружается из базы


Изменено пользователем rubish

Колы я выросту - то хочу буты такым як я

5c8bbc85b99e.gif

 

годные смайлы

Поделиться сообщением


Ссылка на сообщение
(изменено)

я короче ещё понял как вас доебать. Подскажите, пожалуйста, с вашей точки зрения, какой исходный код какой-нибудь программы на python можно было бы изучить в первую очередь? Может есть что-то популярное, востребованное, чтобы открыть и понять, научился ли я чему-то, понимаю ли я хотя бы какой-то процент, разбирать непонятки в конце концов

 

https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django

 

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


Изменено пользователем sonac

Поделиться сообщением


Ссылка на сообщение

чувак. ленивость - это как раз то, что ты из базы не грузишь что-то пока не используешь это.

в случае с тем запросом там когда у тебя компилится запрос ты уже обращаешься к этому и оно загружается из базы

бладж, рубиш, что ты несешь

 

я уже раза 3 написал, что загрузка СВЯЗЕЙ управляется инклюдами

 

IQueryable управляет отложенностью ЗАПРОСА В БАЗУ, то есть когда в принципе твой запрос уйдет на сервер, но вопрос грузить или не грузить связи к этому моменту уже решен, тк в этот момент генерится SQL и изменить его уже нельзя.


Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение
(изменено)

какая кука отвечает за ошибку http 431 Request header fields too large. ? С анон мода сайт открывается, обычно - нет.

sS9t1G.jpg
f3juEG.jpg
HKmTo2.jpg
yVWmPO.jpg


удалил catalog-drawer-view-params и сайт открылся :trollface:  технопоинт бтв

на главную нажал опять та же ошибка :fffuuu:


Изменено пользователем justice_st

Поделиться сообщением


Ссылка на сообщение

было бы получше, если бы это была правда


Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации сообщений.

×
×
  • Создать...