Форум программистов, компьютерный форум, киберфорум
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 09.11.2014
Сообщений: 32
1

Получение массива чекбоксов со View в Controll

25.12.2016, 21:55. Просмотров 1159. Ответов 4
Метки нет (Все метки)


Доброго времени суток. Сабж. Кода даже примерного нет, ибо как-то совсем не представляю как это делать. Совсем наброски

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
@using (@Html.BeginForm())
{
    @Html.LabelFor(model => model.name)
    @Html.EditorFor(model => model.name)
 
    <br />
    @Html.HiddenFor(model => model.id)
    @Html.LabelFor(model => model.telephone)
    @Html.EditorFor(model => model.telephone)<br />    
 
    List<pepe.Models.Product> products = ViewBag.Products;
 
    var productInShop = new List<pepe.Models.Product>();
    var indexOfProducts = new List<int>();
 
    foreach(var pr in Model.products)
    {
        productInShop.Add(pr);
        indexOfProducts.Add(pr.id);
    }
 
    foreach (var pr in products)
    {
        var check = indexOfProducts.Contains(pr.id);
        var checkText = check ? "checked" : "";
        <input type="checkbox" checked="@check" name="Producr" @checkText value="@pr.id">
        @pr.name<br>
    }
 
    <input type="submit" value="Да" />
}
Думаю, что-то такое во view будет, а как мне получить теперь массив чекбоксов со значениями. У меня получается в магазине надо выбрать набор продуктов чекбоксами.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 public ActionResult Edit(int? id)
        {
            Shop shop = db.shops.Find(id);
 
            ViewBag.Products = db.products.ToList();
 
            return View(shop);
        }
 
        [HttpPost]
        public ActionResult Edit(Shop sh, /*??*/)
        {
            
 
            return RedirectToAction("Index");
        }
Прошу совета
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.12.2016, 21:55
Ответы с готовыми решениями:

Получение массива нескольких выбранных чекбоксов с последующей записью в файл
Здравствуйте! Знакомлюсь с PHP, поэтому буду рад любым советам ) В форме есть несколько чекбоксов:...

Scroll на User controll
Доброго времени суток. Сабж, добавляю юзер контрол на форму, но он может выходить за рамки, т.к....

Получение координат View во время анимации
Требуется во время выполнения анимации обработать клик по вьюхе, которая анимируется или каким-то...

Получение данных в модель из View посредством Html.CheckBoxFor
Господа! Прошу помощи! Тема такая: с помощью хелпера Html.CheckBoxFor задаю некий динамический...

4
.NET C#,ASP.NET MVC
Эксперт .NET
590 / 501 / 225
Регистрация: 16.10.2010
Сообщений: 1,902
26.12.2016, 13:20 2
Добавтьте в модель

C#
1
public bool[] Check {get; set;}
Затем в представлении можно использовать

HTML5
1
2
3
4
for(int i = 0, i < = Model.products.Count; i++)
{
    @Html.CheckBoxFor(m => m.Check[i]);
}
0
99 / 99 / 33
Регистрация: 20.09.2014
Сообщений: 451
Записей в блоге: 3
05.06.2018, 11:54 3
lvlkoo, Насколько я понимаю, этот хелпер не генерит скрытый input
HTML5
1
<input name="myCheckbox" type="hidden" value="false">
, который отвечает за передачу значений "false" если CheckBox отжат.
У меня получается массив составляется только из значений "true".
То есть к примеру вместо { true, true, false, true } в контроллер приходит { true, true, true }, а если добавить это поле, то приходит { true, false, true, false, false, true, false }.
Никак не пойму как исправить. Добавлять свойство public bool[] Check {get; set;} будет очень проблематично и костыльно.
Прошу помочь.
0
Модератор
Эксперт .NET
5304 / 4100 / 1183
Регистрация: 12.10.2013
Сообщений: 11,909
Записей в блоге: 2
05.06.2018, 12:31 4
Цитата Сообщение от Serg34 Посмотреть сообщение
Насколько я понимаю, этот хелпер не генерит скрытый input
По моему все как нужно...
C#
1
2
3
4
5
6
7
8
9
10
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
 
namespace MvcApplication2.Models {
    public class Product {
        public bool[] Values { get; set; }
    }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
 
using MvcApplication2.Models;
 
namespace MvcApplication2.Controllers {
    public class HomeController : Controller {
        //
        // GET: /Home/
 
        public ActionResult Index() {
            Product p = new Product {
                Values = new[] { true, true, false, true, false }
            };
            return View(p);
        }
 
    }
}
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@model MvcApplication2.Models.Product
 
@{
    Layout = null;
}
 
<!DOCTYPE html>
 
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <div>
        @for (int i = 0; i < Model.Values.Length; i++) {
            @Html.CheckBoxFor(m => m.Values[i])
        }
    </div>
</body>
</html>
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE html>
 
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <div>
<input checked="checked" data-val="true" data-val-required="Требуется поле Boolean." id="Values_0_" name="Values[0]" type="checkbox" value="true" /><input name="Values[0]" type="hidden" value="false" /><input checked="checked" data-val="true" data-val-required="Требуется поле Boolean." id="Values_1_" name="Values[1]" type="checkbox" value="true" /><input name="Values[1]" type="hidden" value="false" /><input data-val="true" data-val-required="Требуется поле Boolean." id="Values_2_" name="Values[2]" type="checkbox" value="true" /><input name="Values[2]" type="hidden" value="false" /><input checked="checked" data-val="true" data-val-required="Требуется поле Boolean." id="Values_3_" name="Values[3]" type="checkbox" value="true" /><input name="Values[3]" type="hidden" value="false" /><input data-val="true" data-val-required="Требуется поле Boolean." id="Values_4_" name="Values[4]" type="checkbox" value="true" /><input name="Values[4]" type="hidden" value="false" />    </div>
 
<!-- Visual Studio Browser Link -->
<script type="application/json" id="__browserLink_initializationData">
    {"appName":"Chrome","requestId":"2148beb4eaac440c80f933d0aa9a8524"}
</script>
<script type="text/javascript" src="http://localhost:6455/c35b63449c984490bd794bcda12f6687/browserLink" async="async"></script>
<!-- End Browser Link -->
 
</body>
</html>
1
99 / 99 / 33
Регистрация: 20.09.2014
Сообщений: 451
Записей в блоге: 3
05.06.2018, 13:12 5
Дело было в том, что параметр name нужно было писать с индексом
HTML5
1
2
<input checked="checked" data-val="true" data-val-required="Требуется поле Boolean." id="Values_0_" name="Values[0]" type="checkbox" value="true" />
<input name="Values[0]" type="hidden" value="false" />
Тогда все нормально работает
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.06.2018, 13:12

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

Установка значений массива чекбоксов
Есть группа чекбоксов &lt;form action=&quot;/shop/spalnya&quot; id=&quot;category_filter_form&quot;&gt; Категории:...

Программа вылетает при создании массива чекбоксов
Создаю динамически чекбоксы, и при написании этой строчки SelectThings = new TCheckBox(Form1);...

В чем разница (View view) и (View v)
Я только начинаю изучать программирование под андроид (до этого вобще программированием не...

Вывод массива во View
Всем привет. Работаю с Nova Framework и есть следующая задача. Создал хелпер User, где проходит вся...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.