Ответы пользователя по тегу ASP.NET
  • Как сохранить информации в Лист на ASP.NET MVC 4.0?

    Vadimyan
    @Vadimyan
    Программист C#
    Привет. Я согласен с @foxmuldercp - материалы полезные.
    static-поле в контроллере - худшее из возможных решений. Архитектура MVC предполагает наличие модели, которую вы игнорируете. Контроллер должен работать с неким репозиторием в части извлечение и сохранения данных. Приведу упрощенный пример
    public interface IUsersRepository
    {
        UserInfo SaveUserInfo(UserInfo user);
        IReadOnlyCollection<UserInfo> GetUsers();
    }


    В этом случае ваш контроллер может выглядеть следующим образом:
    (Это тестовый пример, на практике нужно использовать DI через IoC-контейнер для внедрения репозитория)
    public class HomeController : Controller
    {
        private readonly IUsersRepository _usersRepository;
        public HomeController()
        {
            _usersRepository = new UsersRepository();
        }
            
        public ActionResult Index()
        {
            var users = _usersRepository.GetUsers();
            return View(users);
        }
    
        public ActionResult Create()
        {
            return View();
        }
    
        [HttpPost]
        public ActionResult Create(UserInfo userInfo)
        {
            if (ModelState.IsValid)
            {
                _usersRepository.SaveUserInfo(userInfo);
                Users.Add(userInfo);
                return RedirectToAction("Index");
            }
            return View();
        }
    }


    При этом работа по сохранению пользователей переносится на реализацию интерфейса IUsersRepository. В зависимости от ваших потребностей, вы можете реализовать хранение коллекции пользователей в БД, в файле на диске, в оперативной памяти (для этого нужно либо сделать репозиторий синглтоном, либо заговнокодить статическую коллекцию в нём).
    Несколько замечаний напоследок:
    1. Репозитории обычно отвечают за работу с конкретным хранилищем данных на уровне сохрани/удали/извлеки, а места для бизнес-логики не остаётся. Поэтому звеньев может быть еще больше - есть сервис бизнес-логики для работы с пользователями, который через репозиторий извлекает данные, а после формирует модель для отдачи контроллеру. Таким образом из класса EF code first Person может формироваться модель UserInfo.
    2. Еще раз напомню про материалы @foxmuldercp , которые на начальных этапах изучения mvc могут быть очень полезны.
    Ответ написан
    Комментировать
  • Что выбрать в качестве серверного приложения, ASP.Net или WCF?

    Vadimyan
    @Vadimyan
    Программист C#
    Привет.
    Мне, если речь идёт о связи с веб-мордой и мобильными клиентами (в перспективе не только wp) нравится в качестве бэкенда использовать asp.net mvc web api. Это может показться сложнее простого wcf, тем более, что в wcf есть возможность сделать rest-сервис, поэтому я попробую обосновать плюсы web api.
    1. Универсальность из коробки. web-api работает работает через http и отдаёт данные в json. Их просто собрать и в веб-приложении, при этом любой клиент всегда может обратиться к ним просто послав http-запрос.
    2. mvc web api очень легко прикрутить к фронтенду с помощью knockout.js или angular.js. Фактически, это работает "из коробки" - делаешь запрос, получаешь в js построенную модель.
    3. Даже в настольном приложении через .net всегда можно легко и, главное, асинхронно работать с web api через класс HttpClient (он же есть для WP).
    4. Нет .net? Это просто http-запрос, стучаться легко с других платформ.
    5. Как хостить WCF-сервис? Это не так и сложно, но хочется простоты, всё просто должно работать. web api хостится так же, как обычное asp.net приложение - в iis.
    Ответ написан
    1 комментарий
  • Как получить один из передаваемых параметров?

    Vadimyan
    @Vadimyan
    Программист C#
    Html.ActionLink(article.Title, 
                    "Item",   // <-- ActionMethod
                    "Login",  // <-- имя контроллера
                    new { id = article.ArticleID }, // <-- Передаваемые параметры.
                    null  // <-- htmlArguments, эта коллекция служит для назначения параметров элементу html, который будет сгенерирован.
                    )

    То есть вам нужно использовать не 4, а 3 параметр метода. При этом в маршрутах должен быть прописан соответствующий вариант параметров (я привёл пример с двумя):
    routes.MapRoute(
                    name: "Default2",
                    url: "{controller}/{action}/d={data_dialog_id}a={data_dialog_title}",
                    defaults: new { controller = "Home", action = "Index", data_dialog_id = UrlParameter.Optional, data_dialog_title = UrlParameter.Optional }
                );


    Если я правильно понял вопрос...
    Ответ написан