web-dev-qa-db-ja.com

.NETのHTTPリクエストで配列値を渡す

.NETのHTTPリクエストで配列を渡して処理する標準的な方法は何ですか?私には解決策がありますが、それが最善のアプローチかどうかはわかりません。

これが私の解決策です:

<form action="myhandler.ashx" method="post">
    <input type="checkbox" name="user" value="Aaron" />
    <input type="checkbox" name="user" value="Bobby" />
    <input type="checkbox" name="user" value="Jimmy" />
    <input type="checkbox" name="user" value="Kelly" />
    <input type="checkbox" name="user" value="Simon" />
    <input type="checkbox" name="user" value="TJ" />

    <input type="submit" value="Submit" />
</form>

ASHXハンドラーは、「user」パラメーターをコンマ区切りの文字列として受け取ります。文字列を分割することで、値を簡単に取得できます。

public void ProcessRequest(HttpContext context)
    {
        string[] users = context.Request.Form["user"].Split(',');
    }

したがって、私はすでに私の問題に対する答えを持っています。同じパラメーター名に複数の値を割り当て、ASHXハンドラーがそれをコンマ区切りの文字列として受け取ると想定し、文字列を分割します。私の質問は、これが.NETで通常どのように行われるかということです。

これの標準的な方法は何ですか?値がコンマで区切られていると仮定してSplit()を呼び出すよりも、複数の値を取得する簡単な方法はありますか?これは通常、配列が.NETで渡される方法ですか、それとも代わりにXMLが使用されますか?

これが最善のアプローチであるかどうかについて誰かが何か洞察を持っていますか?

17
JR.

実際には標準はありませんが、使用しているものがそれに最も近いものです。

ただし、値は実際にはnotカンマ区切りの文字列として送信され、同じ名前の個別の値として送信されます。例のフォームデータは次のようになります。

user=Aaron&user=Bobby&user=Jimmy&user=Kelly&user=Simon&user=TJ

次のように、値を配列として直接読み取ることができます。

string[] users = context.Request.Form.GetValues("user");

Form["user"]を使用すると、値が連結され、再度分割する必要があります。これは時間の無駄であり、値のいずれかにコンマが含まれていると壊れます。

34
Guffa

チェックボックスまたは複数選択リストボックスを使用している場合は、コンマで区切られた値のセットがhtmlから自動的に取得されます。あなたがしていることは完全に大丈夫です。他の方法でJavaScriptで配列を生成する場合は、コンマ区切りの文字列を生成して非表示フィールドに割り当て、サーバーで同じ方法でsplit()を使用できます。 XMLは確かに別のオプションですが、単純な数値の配列または短い文字列を渡すだけの場合、私には複雑に思えます。 (もちろん、渡す必要のある文字列値にコンマが含まれていると、単純な計画が台無しになります。)

2
Ray