0

私は取る必要があります:

<input type="text" name="option[0]['value']" value="test@email.com"/>
<input type="hidden" name="option[0]['option_key']" value="email_from" />

<input type="checkbox" name="option[1]['value']" value="1" checked="checked"/>
<input type="hidden" name="option[1]['option_key']" value="email_asHtml" />

フォームから、値にアクセスして、型指定されたオブジェクトに割り当てることができます。私はこれを実行させようとしてきました。私がやったことはロードされます、仕事を成し遂げるのを助けるためにFastMember、しかし私はスローされたエラーを渡すことさえできます

param'option'をSystem.Collections.Object[]に変換する際の例外。詳細については、内部例外を確認してください

から

public void save_config(dynamic[,] option)
{
    site.options.Clear();
    foreach (Hashtable item in option)
    {
        options tmp = new options();
        var accessor = TypeAccessor.Create(tmp.GetType());
        foreach (string key in item.Keys)
        {
            accessor[tmp, key] = item[key];
        }
        site.options.Add(tmp);
    }

    ActiveRecordMediator<site>.Save(site);
    RedirectToAction("configuration");
}

私が持っていた1つの考えは、引数をスキップできるので、バインディングエラーが発生せず、次を使用してparamを呼び出すことができるというものでした。

HttpContext.Current.Request.Form["option"];

しかし、それをどのように分解するかは不明です。

ここでの問題は、phpで使用できるように多次元配列の投稿データ値を使用する方法です。

---更新---コメントの中で、これが単に「自分が何をしているのかわからない」スタイルのコメントとして書き留められるべきではない理由を説明します(悪い理由ではなく、私と同じように取った)、私はもっとうまくいくかもしれない新しいrountを考えました。(彼らが奇妙に役に立ったのを見てください:D)

したがって、投稿データをそのまま送信する代わりに、muiltdeを削除して、コメントにリストされているのと同じトリックを使用できるように、少し単純な配列を設定します。このようなデータを送信しようとする前に。

option[0]['value'] = usedev
option[0]['option_key'] = email_from
option[1]['value'] = 1
option[1]['option_key'] = asfasf

キーを使用して必要な2つの値を結合するだけで、「値」の長さを取得し、var i ++でループして、必要な値を取得できます。単純な場合、データをこのパターンに移動する必要があります。

option_key[0]   usedev
option_key[1]   email_from
value[0]    1
value[1]    asfasf

そしてそれをループで呼び出すとうまくいくでしょう

string value = HttpContext.Current.Request.Form["value[" + i+ "]"];
string option_key= HttpContext.Current.Request.Form["option_key[" + i+ "]"];
i++;

そうすれば、すべてがうまくいくでしょう。完了したら、最終的な解決策を投稿します。

-秒の更新-

したがって、多次元配列からフラット化し、配列キーを多次元配列であるかのようにタイとして使用すると、値を取得できます。取り決めは、iが反復値でなければより良いだろうということです。これは私が持っているものです。私は信じています

    public void save_config(
            [ARDataBind("site", Validate = true, AutoLoad = AutoLoadBehavior.NewRootInstanceIfInvalidKey)] site site,
        String[] value,
        String[] option_key
        ) {
        site.options.Clear();
        int i = 0;
        foreach (String item in value) {

            options tmp = new options(){
                value = item,
                option_key = option_key[i]
            };
            i++;
            site.options.Add(tmp);
        }
        ActiveRecordMediator<site>.Save(site);
        RedirectToAction("configuration");
    }

答えは、C#が多次元の混合型配列を処理できないことだと思います

4

0 に答える 0