2

キーと値のペア入力用の動的フォームを作成しました。一部の値にはコンマが含まれます。

    using(Html.BeginForm("Index", "Home", FormMethod.Post, new { id = "parameterForm" }))
    {
    <div id="inputBoxesDIV">
         for(int i = 0; i < Model.GetParameters().Count; i++)
           { 
                Html.TextBoxFor(m => m.GetParameters().ElementAt(i).Name, new { name = "name" + i, size = 20 })
                Html.TextBoxFor(m => m.GetParameters().ElementAt(i).Value, new { name = "Value" + i, size = 60 })
        }
    </div>
    }

FormCollection を使用して、次のようなペアを取得しようとしました。

    [HttpPost]
    public ActionResult Index(FormCollection formCollection)
    {
        foreach (var key in formCollection.AllKeys)
        {
            var value = formCollection[key];
        }

        foreach (var key in formCollection.Keys)
        {
            var value = formCollection[key.ToString()];
        }
    //etc...

しかし、FormCollection はカンマ区切りの文字列を使用するため、役に立ちません。

FormCollection をまだ使用できる方法はありますか、またはそれを解決する方法はありますか?

4

2 に答える 2

0

動的に生成されたモデルに基づいてビューを生成できるはずだと思います。そのためには、キーと値のペアの名前の部分を正しく変更する機会を与えるべきではないため、そのようなテキストボックスを削除します。

using(Html.BeginForm("Index", "Home", FormMethod.Post, new { id = "parameterForm" }))
    {
    <div id="inputBoxesDIV">
         for(int i = 0; i < Model.GetParameters().Count; i++)
           { 
<label>Model.GetParameters().ElementAt(i).Name</label>

                Html.TextBoxFor(m => m.GetParameters().ElementAt(i).Value, new { name =Model.GetParameters().ElementAt(i).Name , size = 60 })
        }
    </div>
    }

ユーザーは値のテキストボックスに変更を加えるので、キー名を使用してすべての値を読み取ることができるように送信した後、

[HttpPost]
    public ActionResult Index(FormCollection formCollection)
    {
        foreach (var key in formCollection.AllKeys)
        {
            var value = formCollection[key];
        }

        foreach (var key in formCollection.Keys)
        {
            var value = formCollection[key.ToString()];
        }
}

ユーザーがキーと値のペアの名前と値の両方を変更できるようにしたい場合, 次のように試してください.

     using(Html.BeginForm("Index", "Home", FormMethod.Post, new { id = "parameterForm" }))
        {
        <div id="inputBoxesDIV">
             for(int i = 0; i < Model.GetParameters().Count; i++)
               { 

<input type="text" name="@String.Format("name{0}",i)" value="@Model.GetParameters().ElementAt(i).Name" size="20"/>

                   <input type="text" name="@String.Format("value{0}",i)" value="@Model.GetParameters().ElementAt(i).Value" size="60"/>
            }
        </div>
        }

そしてあなたの投稿アクションでは、

[HttpPost]
    public ActionResult Index(FormCollection formCollection)
    {


        for(int i=0;i<formCollection.AllKeys.Length;i++)
        {
            var value = formCollection["value"+i];
            var name=formCollection["name"+i];
        }
    }

お役に立てれば。

于 2013-10-11T09:49:25.603 に答える