Как взять данные из get и поместить их в пост? - PullRequest
0 голосов
/ 02 мая 2020

Форма отправляет запрос на получение и получает следующий вид

@using System.Linq;
@model List<Searchphone>


<h2 class="search1"></h2>
 <form class="priceeconom1" method="post" asp-action="Index" asp-controller="Home">


    @foreach (var p in Model)
<table>

    {


    <tr class="searchdata">
        <td class="flight">@p.ColourPhone</td>
        <td class="fromtable">@p.TypePhone</td>
        <td class="fromtable">@p.SizePhone</td>
        <td class="fromtable">@p.PriceLight</td>
        <td class="fromtabletime">@p.PriceOk</td>
        <td class="totable">@p.PriceHigh</td>


    </tr>

    }
</table>

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

2) Я сделал это так:

@using System.Linq;
@model List<Searchphone>


<h2 class="search1"></h2>

  <form class="priceeconom1" method="post" asp-action="Index" asp-controller="Home">

    @foreach (var p in Model)
<table>

    {


    <tr class="searchdata">
        <td class="flight"><input type="text" name="@p.ColourPhone</td>
        <td class="fromtable"><input type="text" name="@p.TypePhone</td>
        <td class="fromtable"><input type="text" name="@p.SizePhone</td>
        <td class="pricelight"><input type="checkbox" name="@p.PriceLight.ToString("")"/></td>
        <td class="fromtabletime"><input type="checkbox" name="@p.PriceOk.ToString("")/></td>
        <td class="totable"><input type="checkbox" name="@p.PriceHigh.ToString("")/></td>
         <td class="button13"><button type="submit" asp-action="Buy" asp-route-id="@p.PhoneId" asp-controller="Home">Next</button></td>



    </tr>

    }
</table>
</form>

Когда мне нужно go до следующего пост-формы. И я сделал следующее представление

@using System.Linq;
@using System;


@model List<Searchphone>



@{
    ViewBag.Title = "PhoneId";
}


<h2 class="orderinformation">Order Data</h2>
<form method="post" class="formpass">
    <input type="hidden" id="PhoneId"value="@ViewBag.PhoneId" name="PhoneId">
    <label for="OrderSurName">Surname</label><br>
    <input type="text" placeholder="Enter Surname" name="OrderSurName" required><br>

    <label for="OrderName">Имя</label><br>
    <input type="text" placeholder="Enter Name" name="OrderName" required><br>
    <button type="submit" class="button7">To pay</button>

</form>

Контроллер

 [HttpGet]
        public IActionResult Buy(int? id)
        {
            if (id == null) return RedirectToAction("Index");
            ViewBag.PhoneId = id;
            return View();
        }
        [HttpPost]
        public string Buy(Order order)
        {
            context.Orders.Add(order);

            context.SaveChanges();
            return "Thanks, " + order.OrderName;


        }

Но у меня проблема. Я получил URL: ~ / Home / Buy / 0 и просмотр с возвратом «Спасибо». Я не получаю представление для ввода данных заказа. Порядок таблиц в базе данных получает значения по умолчанию и нулевые значения. В чем моя ошибка?

1 Ответ

0 голосов
/ 07 мая 2020

Форма отправляется методом post, в то время как обратное действие просмотра принимает только запрос HttpGet. Таким образом, он всегда срабатывает в действии HttpPost, поскольку они имеют одинаковые имена.

Я проверил ваши коды и обнаружил, что в вашем первом просмотре есть некоторые проблемы.

[HttpGet]
  public IActionResult Buy(int? id)
  {
      if (id == null) return RedirectToAction("Index");
      ViewBag.PhoneId = id;
      return View();
  }

Это действие просто получает параметр id. Нет необходимости отправлять всю форму. На мой взгляд, вам даже не нужно использовать формы, просто используйте тег , как показано ниже:

@using System.Linq;
@model List<Searchphone>

<h2 class="search1"></h2>

@foreach (var p in Model)
{


    <table>
        <tr class="searchdata">
            <td class="flight"><input type="text" name="@p.ColourPhone" /></td>
            <td class="fromtable"><input type="text" name="@p.TypePhone" /></td>
            <td class="fromtable"><input type="text" name="@p.SizePhone" /></td>
            <td class="pricelight"><input type="checkbox" name="@p.PriceLight.ToString()" /></td>
            <td class="fromtabletime"><input type="checkbox" name="@p.PriceOk.ToString()" /></td>
            <td class="totable"><input type="checkbox" name="@p.PriceHigh.ToString()" /></td>
            <td class="totable"> <a asp-action="Buy" asp-route-id="@p.PhoneId" asp-controller="Home">Next</a></td>
        </tr>
    </table>

}
...