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

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

25.12.2016, 21:55. Просмотров 451. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2016, 21:55
Ответы с готовыми решениями:

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

Как передать параметры из одного View в EditorFor другого View
Здравствуйте. Есть 2 view, первое просто отображает данные, 2 должно их...

Можно ли передать несколько View во View
Вопрос новичка можно ли передать несколько View во View ? Дело в том что мне...

Как во view получить данные из контроллера в формате Json или javascript-массива?
Здравствуйте! Есть view в которой у меня есть раздел &lt;script&gt;&lt;/script&gt; . Там я...

view во view Html.RenderPartial
Добрый день! Такая ситуация, в строго типизированном представлении (запись...

4
lvlkoo
.NET C#,ASP.NET MVC
449 / 397 / 185
Регистрация: 16.10.2010
Сообщений: 1,625
Завершенные тесты: 2
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
Serg34
90 / 90 / 33
Регистрация: 20.09.2014
Сообщений: 427
Записей в блоге: 3
Завершенные тесты: 1
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
insite2012
Модератор
Эксперт .NET
4865 / 3818 / 1096
Регистрация: 12.10.2013
Сообщений: 11,095
Записей в блоге: 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
Serg34
90 / 90 / 33
Регистрация: 20.09.2014
Сообщений: 427
Записей в блоге: 3
Завершенные тесты: 1
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
05.06.2018, 13:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2018, 13:12

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

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

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


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

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

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