5

由于隐藏输入值似乎有 1024 个字符的限制,对于超过此限制的值,每个人都会做什么?可以合理地使用隐藏文件输入(<input type="file" value="some very long value"...)吗?任何此类解决方案的字段长度限制是什么?

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

我正在使用 ASP.NET MVC 3,并且希望能够以最少的努力集成的解决方案。理想情况下,我希望能够使用剃刀语法传递超过 1024 个字符的模型值。

我还需要能够使用 JavaScript/jQuery 在客户端操作值。

每个人都做了什么来解决这个问题?理想情况下,我想将值作为单个变量来处理。有没有处理此类信息的好方法?我使用的最大值似乎约为 40k。

编辑:如果您在上面输入元素的值中注意到 ... ,则该值似乎被缩短为 1024 个字符,以适应 value 属性。我对这个问题的原因并不肯定,但认为这是对属性大小的限制。如果有人可以否认这一点,和/或解释如何在某处允许更大的属性或字段,我将不胜感激。我希望将重构保持在最低限度,因为我已经对当前架构进行了大量投资。许多其他组件当前以当前形式使用此值列表。

编辑:我的错误!Firebug 报告“...”,并导致 JavaScript 错误。它显然不能很好地处理超过 1024 个字符的属性。事实上,所有数据都毫无问题地填充(当萤火虫被禁用时)。这似乎是萤火虫的问题。我带来的不便表示歉意。

4

6 回答 6

5

一个怎么样

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

应用了样式/css规则display:none

于 2012-04-23T20:01:39.527 回答
5

使用分组

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

更新:

控制器

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" />
}
于 2012-04-23T20:12:04.037 回答
0

1024 是 HTML 3 及更低版本中 HTML 元素的任何属性的限制。为了解决这个问题,您可以使用一个文本区域,将值放在标签之间。

由于您有这么多数据,您最好在服务器端实现某种分页并使用 AJAX 发出请求以获取下一组数据。

于 2012-04-23T20:04:12.790 回答
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 字符串。

我个人可能会选择第二个。

于 2012-04-23T20:06:00.133 回答
0

我同意@Gaby 关于重新思考架构的观点。但如果你真的必须,我建议你建立 javascript 数组。这样,处理数据就会容易得多。用剃须刀做到这一点非常简单。

于 2012-04-23T20:08:48.357 回答
0

我真的不认为有限制。只要您可以在“”引号之间获取字符串长度,并且在同一行上,它就应该接受它。有传言说它有 65000 个字符,但是有人写了一个 javascript 并得到了超过 2,000,000 个字符。

于 2016-04-06T12:04:44.360 回答