2015-04-11 3 views
0

У меня есть вымышленный веб-сайт в ASP.NET MVC4, который предназначен для моделирования системы бронирования билетов на аренду частного самолета. Тем не менее, я борюсь немного, когда речь идет об осуществлении функций, которые я хочу иметь, один из которых использует выпадающее меню для хранения данных в другую базу данныхЗначение выпадающего списка Store в базе данных?


Чтобы дать Вам лучшее представление о том, что я м действительно стремятся в стороне

  • пользователей, чтобы войти на сайт
  • перейти на страницу рейсы
  • Посмотрите на полетах
  • в конце концов перейти к сделать бронирование PAG е

Тогда

  • Выберите желаемый рейс из выпадающего меню
  • ввода количество билетов, которые они хотят приобрести. (Раскрывающийся работает, но сброс не выполняется)
  • база данных Затем пользователь должен проверить возраст пользователя (который уже хранится в базе данных) находится между 18 и 64
    • Если они вне этого диапазона должно появиться сообщение об ошибке и не позволять им забронировать билет.
    • Если они в пределах этого диапазона, то количество мест осталось должно уменьшаем по количеству билетов «купленного»

Также

  • На странице бронирования должна предложить пользователю войдите в систему, если они еще этого не сделали.

Это где это становится действительно запутанной для меня.

У меня есть две страницы, связанные с рейсами:

(Скриншот из файлов проекта в обозревателе решений)

enter image description here

Вот мои соответствующие файлы, относящиеся к таблице полетов (на странице 1)

https://gist.github.com/anonymous/144ed06e1d4f2011161e

Страница 2 приведена в списке на странице 1 и вот как это делается:

Просмотр:

@model List<Project_v3.Models.FlightsTable> 

@{ 
    ViewBag.Title = "Book Flight | Open Airlines"; 
    Layout = "~/Views/Shared/_MyLayout.cshtml"; 
} 

<h2>Book A Flight</h2> 

    <select id='SelectedFlight' name='SelectedFlight'> 
     @foreach (var flight in Model) 
     { 
      <option value='@flight.FlightID'>@String.Format("{0} to {1}", flight.Departure, flight.Arrival)</option> 
     } 
    </select> 

Контроллер:

public ActionResult BookFlight() 
    { 
     using (var context = new FlightsDBEntities()) 
     { 
      // Get all of the flights within your table 
      var flights = context.FlightsTables.ToList(); 

      // Pass the flights to your View 
      return View(flights); 
     } 
    } 

Мой Вопрос

Как сделать данные из выпадающего меню поля в другой базе данных например, таблица «Бронирование»? (Я еще не сделал эту таблицу). Если это имеет смысл?

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

+0

Вы примените '[Авторизовать]' атрибут метода для обеспечения пользователя перенаправляется на страницу входа в систему, если не разрешено. Вы проверяете возраст пользователей в методе GET (перед отображением страницы бронирования) и перенаправляете на страницу с ошибкой, если их возраст недействителен.Используйте модели просмотра и html-помощники для создания ваших элементов управления. Я настоятельно рекомендую вам перейти на сайт MVC и проработать основные учебные пособия. –

ответ

1

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

public class BookingModel 
{ 
    public string SelectedFlightId {get;set;} 
    public List<SelectListItem> Flights {get;set;} 
} 

Необходимо изменить действие, использующее новую модель.

public ActionResult BookFlight() 
{ 
    using (var context = new FlightsDBEntities()) 
    { 
     // Get all of the flights within your table 
     var flights = context.FlightsTables.ToList(); 

     var booking = new BookingModel(); 
     booking.Flights = flights.Select(f => new SelectListItem 
          { 
           Text = String.Format("{0} to {1}", f.Departure, f.Arrival), 
           Value = f.FlightID.ToString() 
          }).ToList(); 
     return View(booking); 
    } 
} 

Изменить вид, чтобы сделать использование нашей новой модели

@model Project_v3.Models.BookingModel 

@{ 
    ViewBag.Title = "Book Flight | Open Airlines"; 
    Layout = "~/Views/Shared/_MyLayout.cshtml"; 
} 

<h2>Book A Flight</h2> 
@using(Html.BeginForm()) 
{ 
    @Html.DropDownListFor(x => x.SelectedFlightId, Model.Flights) 
    <input type="submit" value="Submit" /> 
} 

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

[HttpPost] 
public ActionResult BookFlight(BookingModel booking) 
{ 

    using (var context = new FlightsDBEntities()) 
    { 

     if(ModelState.IsValid) 
     { 
      var flightId = Int32.Parse(booking.SelectedFlightId); 
      var flight = context.FlightsTables.First(f => f.FlightID == flightId); 

      var user = context.UsersTables.First(u => u.UserId == User.Identity.GetUserId()); 
      user.Flights.Add(flight) 
      context.SaveChanges(); 
     } 

     // repopulate again the flights (this can be cached and/or be refactored a under method) 
     var flights = context.FlightsTables.ToList(); 
     booking.Flights = flights.Select(f => new SelectListItem 
          { 
           Text = String.Format("{0} to {1}", f.Departure, f.Arrival), 
           Value = f.FlightID.ToString() 
          }).ToList(); 
    } 
    return View(booking); 
} 
+0

Привет, спасибо за ответ. Я столкнулся с проблемой с вашим решением. Я создал новую модель, щелкнув правой кнопкой мыши на «Модели» и создав новый класс, а затем написал код, когда вы разместили его, но он говорит об ошибке. Невозможно найти имя типа или пространства имен «SelectedFlightId» (вам не хватает директивы using или ссылка на сборку?) Аналогичная ошибка относится к списку, в котором говорится о ожидаемом классе, делегировании, перечислении, интерфейсе или структуре. Исправьте эту проблему в своем ответе, добавив int к выбранному идентификатору полета. –

+0

Кроме того (я не знаю, как это исправить). Я получаю сообщение об ошибке в контроллере, где говорится, что 'Имя 'f' не существует в текущий контекст ". Что вызывает это? –

+0

@BorisSmith спасибо, я забыл скопировать 'int', когда я отправил ответ. – adricadar

Смежные вопросы