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 のようです。

編集: 上記の入力要素の値にある ... に注意すると、value 属性に収まるように、値が 1024 文字に短縮されているように見えます。この問題の原因については確信が持てませんが、属性サイズの制限であると考えています。誰かがこれを否定したり、どこかでより大きな属性やフィールドを許可する方法を説明したりできる場合は、大いに感謝します. 現在のアーキテクチャにすでに多額の投資を行っているため、リファクタリングを最小限に抑えたいと考えています。他の多くのコンポーネントは現在、この値のリストを現在の形式で利用しています。

編集:私の間違いです!Firebug は「...」を報告し、JavaScript エラーを引き起こしていました。どうやら 1024 文字を超える属性をうまく処理できないようです。実際、すべてのデータは問題なく入力されています (firebug が無効になっている場合)。これは、firebug の問題のようです。ご迷惑をおかけし申し訳ございません。

4

6 に答える 6

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 に答える
5

どうですか

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

スタイル/cssルールがdisplay:none適用されていますか?

于 2012-04-23T20:01:39.527 に答える
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.JsonIdsJson文字列が入力されています。

私は個人的にはおそらく2番目に行きます。

于 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 に答える