2012-04-23 7 views
5

Ponieważ wydaje się, że dla ukrytych wartości wejściowych występuje limit 1024 znaków, co każdy robi dla wartości przekraczających ten limit? Czy zamiast tego można rozsądnie używać ukrytego pliku wejściowego (< input type = "file" value = "some very long value" ...)? Jakie byłyby ograniczenia długości pola dla każdego takiego rozwiązania?Problem z ukrytymi danymi wejściowymi i bardzo dużymi wartościami w kodzie HTML i ASP.NET MVC 3 Razor

<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"> 

Używam ASP.NET MVC 3 i doceniłbym rozwiązanie, które można zintegrować przy minimalnym wysiłku. Idealnie, chciałbym móc przekazać wartości modelu przekraczające 1024 znaki przy użyciu składni maszynki do golenia.

Potrzebuję również móc manipulować wartością po stronie klienta, używając JavaScript/jQuery.

Co każdy robi, aby obejść ten problem? Idealnie, chciałbym poradzić sobie z wartością jako pojedyncza zmienna. Czy istnieje dobry sposób na obsługę takich informacji? Największa wartość mojego użycia wydaje się mieć rozmiar około 40 kB.

Edycja: Jeśli zanotujesz ... w wartości elementu wejściowego powyżej, wydaje się, że wartość jest skracana do 1024 znaków, aby dopasować do atrybutu wartości. Nie jestem przekonany co do przyczyny tego problemu, ale uważam, że jest to limit rozmiaru atrybutu. Jeśli ktoś może temu zaprzeczyć i/lub wyjaśnić, jak zezwolić na większy atrybut lub pole, bardzo bym to docenił. Wolałbym ograniczyć re-faktoring do minimum, ponieważ już mam znaczną inwestycję w obecną architekturę. Wiele innych komponentów wykorzystuje obecnie tę listę wartości w jej obecnej formie.

Edytuj: Mój błąd! Firebug zgłaszał "..." i powodował błędy JavaScript. Najwyraźniej nie obsługuje on poprawnie atrybutów o długości przekraczającej 1024 znaków. Wszystkie dane są zapełniane bez problemu (gdy firebug jest wyłączony). To wydaje się być problem z firebug. Przepraszam za utrudnienia.

+0

Uważam, że powinieneś ponownie przemyśleć swoją architekturę, jeśli potrzebujesz 40-karatowych pól wprowadzania danych. Czy chcesz podzielić się koncepcją tej potrzeby? –

+0

Czy jesteś pewien, że limit dotyczy ukrytych danych wejściowych? Wiem, że problem z limitem rozmiaru QueryString w .Net4 wynosi 1024, co nie ma nic wspólnego z MVC. To może być skonfigurowane w pliku web.config –

+0

Dodawanie następujące do pliku web.config nie wydaje się mieć żadnego wpływu: ... user1003221

Odpowiedz

4

wykorzystywać zgrupowania

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

zmiana:

kontrolery

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()); 
    } 

widok

@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" /> 
} 
+0

Ponieważ nie wiem, skąd się bierze limit, możesz również spróbować

+0

Podczas gdy problem nie istnieje, zaznaczam to jako odpowiedź, ponieważ jest bardziej czysto niż moje rozwiązanie. – user1003221

5

Jak o

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

z reguły styl/css display:none stosowanej do niego?

0

1024 jest limitem dowolnego atrybutu elementu HTML w HTML 3 i poniżej. Aby obejść ten problem, możesz użyć obszaru tekstowego, w którym umieścisz wartość między tagami.

Ponieważ masz tak dużo danych, lepiej może zaimplementować rodzaj stronicowania po stronie serwera i użyć AJAX, aby wysłać żądanie uzyskania następnego zestawu danych.

0

Myślę, że najbardziej "prawidłowym" sposobem na to byłoby użycie atrybutów danych.

#my-info { 
    display: none; 
} 

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

lub za pośrednictwem javascript:

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

I mieć Model.JsonIds zaludnionych z ciągiem JSON.

Prawdopodobnie osobiście pójdę z drugim.

0

Zgadzam się z @Gaby o ponownym przemyśleniu architektury. Ale jeśli naprawdę musisz, proponuję zbudować tablicę javascript. W ten sposób znacznie łatwiej będzie pracować z danymi. z brzytwą jest to całkiem proste.

0

ja nie reall Chyba jest jakiś limit. tak długo, jak długo można uzyskać długość ciągu między "" cytatami, i na tej samej linii, powinno to zaakceptować. krążą pogłoski, że jest to 65 000 znaków, jednak ktoś napisał javascript i uzyskał ponad 2 000 000 znaków.

+0

To powinien być komentarz – ketan

Powiązane problemy