问题与隐藏的输入和在HTML非常大的价值和ASP.NET MVC 3剃须刀(Issue with h

2019-06-23 21:25发布

由于似乎是隐藏的输入值的1024个字符的限制,这是什么大家对于超过此限制值吗? 可以将隐藏的文件输入(<INPUT TYPE =“文件” 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个字符,以适应值属性。 我还不能肯定这个问题的原因,但相信这是对属性的大小限制。 如果有人能否认这一点,和/或解释如何允许更大的属性或字段的地方,我将不胜感激。 我宁愿保持重新分解到最低限度,因为我已经在当前架构显著的投资。 其他一些组件目前利用它目前的形式值列表。

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

Answer 1:

使用分组

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


Answer 2:

怎么样

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

有一种风格/ CSS规则display:none适用于它?



Answer 3:

1024是一个HTML元素上的任何属性的HTML中3和低于限制。 要解决它,你可以使用你把该值在标签之间的文本区域。

既然你有这么多的数据,你可能会更好实现某种服务器端分页和使用AJAX提出请求,以获得下一组数据。



Answer 4:

我认为最“正确”的方式做到这一点是使用数据属性。

#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字符串。

我会亲自去与第二,大概。



Answer 5:

我@Gaby同意关于重新思考建筑。 但如果你真的要,我建议你建立JavaScript数组。 这样它会更容易使用数据进行工作。 这是很简单的刀片不能做到这一点。



Answer 6:

我真的不认为这是一个限制。 只要你能得到“”引号之间的字符串长度,并在同一行,就应该接受它。 还有它是65000个字节的传闻,但是有人写了一个JavaScript,并得到很好超过2,000,000个字符。



文章来源: Issue with hidden input and very large values in HTML and ASP.NET MVC 3 Razor