Как перенести информацию базы данных на другой контроллер в asp.net mvc - PullRequest
0 голосов
/ 02 ноября 2019

Моя цель: пользователь выбирает элемент из списка (список элементов из базы данных), и этот элемент будет отображаться на другой странице.

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

Моя база данных была создана Entity Framework, одной из моих моделей.

Моя модель базы данных:

public class Apartment
{
    // id of apartment
    [HiddenInput(DisplayValue = false)]
    public int ApartmentId { get; set; }

    // quantity in apartment
    [Required(ErrorMessage = "Поле должно быть установлено")]
    public int Quantity { get; set; }

    // class of apartment
    [Required(ErrorMessage = "Поле должно быть установлено")]
    public Classes Class { get; set; }

    // price of apartment
    [Required(ErrorMessage = "Поле должно быть установлено")]
    public int Price { get; set; }

    // start of book apartment
    [Required(ErrorMessage = "Поле должно быть установлено")]
    public DateTime Start { get; set; }

    // end of book apartment
    public DateTime End { get; set; }
}

// Class apartment in enum
public enum Classes
{
    Economy,
    Standard,
    Luxury
}

Просмотр, где пользователь выбирает свою квартиру:

foreach (Hotel.DAL.Entities.Apartment a in Model)
{
    <div id="ap" class="col-md-3">
        <p>Class: @a.Class
        <p>Quantity: @a.Quantity человек
        <p>Price for one day: @a.Price $

        @if (ViewBag.TimeInt != null)
        {
            ViewBag.FullPrice = a.Price * ViewBag.TimeInt;
            <p>Full price: @ViewBag.FullPrice $</p>
        }

        @if (HttpContext.Current.Request.HttpMethod == "POST")
        {
            <form asp-action="Index" method="post">
                <p>
                    <button value="Open Window" onclick="window.open('/Home/Confirm')" class="btn btn-primary">Book</button>
                    <input type="hidden" name="id" value="@a.ApartmentId" />
                </p>
            </form>
        }
</div>
}

Скрытый тип - это вход, в котором я беру значение моего ключа.

Метод просмотра контроллера:

public ActionResult Index(string sortOrder)
{
    ViewData["ClassSortParm"] = sortOrder == "Class" ? "class_desc" : "Class";
    ViewData["PriceSortParm"] = sortOrder == "Price" ? "price_desc" : "Price";

    var p = from s in dbshow.GetList()
            select s;

    switch (sortOrder)
    {
        case "class_desc":
            p = dbshow.GetList().OrderByDescending(s => s.Class);
            break;

        case "price_desc":
            p = dbshow.GetList().OrderByDescending(s => s.Price);
            break;

        default:
            p = dbshow.GetList().OrderBy(s => s.Class);
            break;
    }

    return View(p);
}

// filters to book apartments
[HttpPost]
public ActionResult Index(string sortOrder, Classes? Class, int? quantity, DateTime? start, DateTime? end, bool? check)
{
    ViewData["CurrentQuan"] = quantity;
    ViewData["CurrentClass"] = Class;
    ViewData["CurrentStart"] = start;
    ViewData["CurrentEnd"] = end;
    ViewData["CurrentCheck"] = check.GetValueOrDefault();

    ViewData["ClassSortParm"] = sortOrder == "Class" ? "class_desc" : "Class";
    ViewData["PriceSortParm"] = sortOrder == "Price" ? "price_desc" : "Price";

    var aps = from s in dbshow.GetList()
              select s;

    return View(aps);
}

Контроллер, который мне нужен для передачи ApartmentId (ключ) по умолчанию:

public ActionResult Confirm()
{
    return View();
}

Я слышал, что лучший способ сделать это с помощью куки. Но я не знаю как.

1 Ответ

0 голосов
/ 02 ноября 2019

Вы можете создать cookie-файл и прочитать его содержимое или использовать сеансы. См. Пример: https://andrewlock.net/an-introduction-to-session-storage-in-asp-net-core/

Или другое решение - сохранить их выбор в базе данных и извлечь их там, где вам нужно.

Обновление: Изменить форму для публикацииключ / подтвердить /, поэтому нет необходимости сохранять это значение в файле cookie или сеансе

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