ASP.net цикл Foreach и хранить данные в viewbag, чтобы показать на вид - PullRequest
0 голосов
/ 01 июня 2018

Я сделал цикл foreach, который просматривает все cart_items от определенного пользователя.Мне нужно рассчитать общую стоимость каждого продукта (цена продукта * количество) и сохранить ее в виде в виде мешка для отображения на самой странице.Я не знаю, как я могу решить эту проблему, хотя.Это то, что я кодировал (viewbag переопределяется, поэтому последняя строка, это значение, которое он покажет):

 public ActionResult Index()
    {
        string user_id = User.Identity.GetUserId();

        var order_id = db.Orders.Where(x => x.User_Id == user_id).Where(x => x.Paid == 0).Select(x => x.Order_Id).FirstOrDefault();
        var select_user_cart = db.Order_details.Where(x => x.Order_Id == order_id);




        var quantity_price = from x in db.Order_details
                             where x.Order_Id == order_id
                             select new { x.Quantity, x.Current_price};


        List<decimal> Calc = new List<decimal>();
        foreach (var item in quantity_price)
        {
            var quantity = item.Quantity.ToString();
            var double_quantity = Convert.ToDecimal(quantity);
            var double_price = Convert.ToDecimal(item.Current_price);

            var calc = double_quantity * double_price;
            Calc.Add(calc);               
        }
        ViewBag.Calc = Calc;


        var order_details = db.Order_details.Include(o => o.Product).Include(o => o.Order);


        return View(select_user_cart.ToList());
    }

Table

Code

Update

Ответы [ 5 ]

0 голосов
/ 01 июня 2018

Я получил его для работы со следующим кодом.Единственное, что происходит сейчас, это то, что счетчик на самом деле показывает цену.Но расчеты верны.Спасибо всем, кто мне помог.(Если вы знаете, как отключить показ этого счетчика, я бы хотел его услышать.)

ПРОСМОТР:

@{ int counter = 0;
    foreach (var item in Model)
    {

<tr>
    <td>
        @Html.DisplayFor(modelItem => item.Product.Name)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Current_price)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Quantity)
    </td>
    <td>
        @ViewBag.Calc[counter]
        @(counter++)

    </td>

    <td>
        @Html.ActionLink("Details", "Details", new { id = item.Order_details_Id }) |
        @Html.ActionLink("Delete", "Delete", new { id = item.Order_details_Id })
    </td>
</tr>
        }
    } 

КОНТРОЛЛЕР:

List<decimal> Calc = new List<decimal>();
        foreach (var item in quantity_price)
        {
            var quantity = item.Quantity.ToString();
            var double_price = Convert.ToDecimal(item.Current_price);
            var calc = item.Quantity * double_price;
            Calc.Add(calc);               
        }
        ViewBag.Calc = Calc;
0 голосов
/ 01 июня 2018

Вы можете использовать общее значение имени свойства в вашей модели (например: количество, current_price) и назначить ему общее значение.Или вы можете использовать ViewBag.Calc в качестве массива, но я думаю, что если вы используете массив, это также может привести к проблеме.Составьте список десятичного типа или что-то вроде этого:

List <decimal> total = new <decimal>();
foreach (var item in quantity_price)
{
    var quantity = item.Quantity.ToString();
    var double_quantity = Convert.ToDouble(quantity);
    var double_price = Convert.ToDouble(item.Current_price);

    var calc = double_quantity * double_price;
    total.add(calc)
}

ViewBag["calc"] = total;

В поле зрения:

@int count=0; 
@foreach (var item in Model)
{

<tr>
    <td>@ViewBag.Calc[count]</td>  
   @count++;
  </tr>

}
0 голосов
/ 01 июня 2018

Вы можете изменить свой код на:

ViewBag.Calc = from x in order_details
where x.Order_Id == order_id
select (x.Quantity * x.Current_price);
0 голосов
/ 01 июня 2018

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

Определите счетчик перед циклом foreach.

Получить элемент на основе счетчика.

Увеличьте счетчик.

вот так

@int i=0; //counter
@foreach (var item in Model)
{
   <tr>    
    <td>@ViewBag.Calc[i]</td>  //get item from the list basis of counter.
   @i++; //increase conter value
  </tr> 
}

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

0 голосов
/ 01 июня 2018

Предполагая, что вы хотите получить общую стоимость всех предметов, вам нужно добавить переменную для каждого предмета и вместо этого добавить итоговую сумму в viewbag.

    double total = 0;
    foreach (var item in quantity_price)
    {
        var quantity = item.Quantity.ToString();
        var double_quantity = Convert.ToDouble(quantity);
        var double_price = Convert.ToDouble(item.Current_price);

        var calc = double_quantity * double_price;
        total += calc;
    }
    ViewBag.Calc = total;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...