Вопрос по asp.net-mvc-3, razor, html, asp.net-mvc – Проблема со скрытым вводом и очень большими значениями в HTML и ASP.NET MVC 3 Razor

5

Поскольку для скрытых входных значений существует ограничение в 1024 символа, что все делают для значений, превышающих этот предел? Может ли вместо этого разумно использоваться скрытый входной файл (& lt; тип ввода = "файл" значение = "некоторое очень длинное значение" ...)? Какими будут ограничения длины поля для любого такого решения?

<code><input id="someId" type="hidden" 
value="5538680,5538683,5538858,5539195,5540063,5540812,5540814,5541665,5541666,5541667,
5541668,5541669,5541670,5541671,5541672,5541673,5541674,5541675,5541676,5541677,5541678,
5541679,5541680,5541682,5541683,5541684,5541685,5541686,5541687,5541688,5541689,5541690,
5541691,5541692,5541693,5541694,5541695,5541696,5541697,5541698,5541728,5543254,5543501,
5543502,5543949,5543950,5544073,5544867,5545079,5545642,5545827,5545890,5545891,5545895,
5545896,5546323,5546631,5546632,5546972,5547794,5547900,5547945,5547980,554923...735181,
5735182,5735183,5735184,5735185,5735187,5735188,5735189,5735227,5735228,5735229,5735235,
5735236,5735237,5735238,5735239,5735240,5735241,5735242,5735243,5735273,5735744,5735745,
5735746,5735747,5735748,5735749,5735836,5735837,5735838,5735839,5735840,5735841,5735842,
5735843,5735844,5735845,5735846,5735847,5735848,5735849,5735850,5735851,5735852,5735853,
5735854,5735855,5735856,5735857,5735858,5735859,5737183,5738250,5738563,5738564,5738565,
5738566,5738567,5738568,5738569,5738570,5738731,5738732,5738946" name="someName">
</code>

Я использую ASP.NET MVC 3 и был бы признателен за решение, которое могло бы интегрироваться с минимальными усилиями. В идеале я хотел бы иметь возможность передавать значения модели, превышающие 1024 символа, с использованием синтаксиса бритвы.

Мне также нужно уметь манипулировать значением на стороне клиента, используя JavaScript / jQuery.

Что все делают, чтобы обойти эту проблему? В идеале я хотел бы иметь дело со значением как с одной переменной. Есть ли хороший способ обработки такой информации? Наибольшее значение для моего использования составляет около 40 КБ.

Редактировать: Если вы заметили ... в значении элемента ввода выше, то, похоже, значение сокращается до 1024 символов, чтобы вписаться в атрибут значения. Я не уверен в причине этой проблемы, но считаю, что это ограничение на размер атрибута. Если кто-то может это отрицать и / или объяснить, как разрешить где-то более крупный атрибут или поле, я был бы очень признателен. Я бы предпочел свести ре-факторинг к минимуму, поскольку у меня уже есть значительные инвестиции в текущую архитектуру. Ряд других компонентов в настоящее время используют этот список значений в его текущей форме.

Изменить: Моя ошибка! Firebug сообщал о & quot; ... & quot; и вызывал ошибки JavaScript. Очевидно, он плохо обрабатывает атрибуты, превышающие 1024 символа. Все данные на самом деле заполняются без проблем (когда firebug отключен). Это похоже на проблему с firebug. Я прошу прощения за доставленные неудобства.

Я считаю, что вам следует переосмыслить свою архитектуру, если вам нужны поля ввода длиной 40 КБ. Хотите поделиться концепцией, стоящей за этой потребностью? Gabriele Petrioli
Добавление следующего в файл web.config, похоже, не дает никакого эффекта: & lt; system.web & gt; & lt; httpRuntime maxQueryStringLength = & quot; 16384 & quot; / & GT; ... & lt; /system.web> user1003221
Вы уверены, что ограничение на скрытые входы? Я знаю, что есть проблема с ограничением размера QueryString в .Net4, равным 1024, не имеющим ничего общего с MVC. Это можно настроить в web.config Brian White
Габи, я использую это поле для хранения идентификаторов набора моделей, связанных с редактируемой моделью. Почти во всех случаях это поле содержит менее 200 символов. Есть несколько выбросов, которые содержат гораздо больший список. Например, только 19 из нескольких тысяч имеют более 1000 символов. user1003221

Ваш Ответ

6   ответов
0

что есть предел. до тех пор, пока вы можете получить длину строки между & quot; & Quot; кавычки, и на той же строке, он должен принять его. ходят слухи, что это 65000 символов, однако кто-то написал javascript и получил более 2000000 символов.

Это должен быть комментарий
0

льно нужно, я предлагаю вам создать массив JavaScript. Таким образом, будет намного проще работать с данными. это довольно просто сделать с помощью бритвы.

0

1024 - это предел любого атрибута элемента HTML в HTML 3 и ниже. вы можете использовать текстовую область, где вы помещаете значение между тегами.

Поскольку у вас так много данных, вам может быть лучше реализовать какую-то подкачку на стороне сервера и использовать AJAX, чтобы сделать запрос на получение следующего набора данных.

0

что наиболее "правильный" способ сделать это будет использовать атрибуты данных.

#my-info {
    display: none;
}

<div id="my-info" data-ids="id1,id2,etc"></div>

Или через JavaScript:

<script>
    $("#my-info").data("ids", @Model.JsonIds);
</script>

И имеютModel.JsonIds заполнен строкой Json.

Я бы лично пошел со вторым, наверное.

4

<input name="someIDs[0]" type="hidden" value="5538680"/>
<input name="someIDs[1]" type="hidden" value="5538683/>

update:

контроллеры

public ActionResult Test()
    {
        Random rand = new Random();
        List<int> list = new List<int>();
        for (int i = 0; i < 10000; i++)
        {
            list.Add(rand.Next(1,999999));
        }
        return View(list);
    }
    [HttpPost]
    public ActionResult Test(int[] item)
    {
        return View(item.ToList());
    }

Посмотреть

@model List<int>
@{
    ViewBag.Title = "Test";
}

@using (Html.BeginForm())
{
    foreach (int item in Model)
    {

        <input type="hidden" name="item" value="@item" />
    }
    <input type="submit" value="submit" />
}
Поскольку я не знаю, откуда исходит ограничение, вы также можете попробовать & lt; input name = & quot; someIDs & quot; ID = & Quot; someIDs_0 & Quot; тип = & Quot; скрыт & Quot; значение = & Quot; 5538680 & Quot; / & GT; & lt; input name = "someIDs" ID = & Quot; someIDs_1 & Quot; тип = & Quot; скрыт & Quot; значение = & Quot; 5538683 / & GT; Каждый элемент html невелик, но когда он публикуется, он будет прочитан, поскольку все значения someIDs разделены запятой
Хотя проблемы не существует, я отмечаю это как ответ, поскольку она более понятна, чем мое решение. user1003221
5

<textarea name="someName">5538680,5538683,...</textarea>

с правилом стиля / CSSdisplay:none применяется к этому?

Похожие вопросы