0

MySQL テーブルに 15 個のフィールドを作成しました。フォームを使用してその数の項目を追加するオプションをエンド ユーザーに提供したいと考えています。ただし、インターフェイスをきれいに保つために、おそらく 2 ~ 3 個のテキスト ボックスのみを提示し、必要に応じてさらに追加できるボタンを提供したいと考えています。

Javascriptを使用してフォームにテキストボックスを追加することが問題になるとは思いませんが、POSTデータをフォームハンドラーに送信した後、正確に処理する方法について混乱しています。これを行うための最良の方法について誰かが光を当てることができますか?

4

2 に答える 2

1

すべてのフォーム値を含む通常の POST 変数を使用する必要がある場合は、次のようにする必要があります。

サーバー言語や JavaScript を使用してテキストボックスを生成する場合、それらがサーバーに送信される方法は、それらのname属性を使用します。要素に一貫した名前を付ける方法を提供すると、物事を数字と「組み合わせる」ことができます。たとえば、ユーザーが「追加」をクリックするたびに 2 つのテキストボックス (「foo」用と「bar」用) を提供する場合、最後に番号を増やして、それらが一致することを確認できます。

<input type="text" name="foo1" /><input type="text" name="bar1" />
<input type="text" name="foo2" /><input type="text" name="bar2" />
and so on

次に、サーバーで、「foo」と「bar」で始まる POST 変数内のすべての項目を見つける必要があります。

for (item in POST) {
    if (item startswith "foo") {
        // Extract the number at the end, and find the related "bar"
    }
}
于 2012-10-15T15:14:20.877 に答える
0

Web アプリケーションに ASP.NET MVC を使用し、クライアント側フレームワークに jQuery を使用していると仮定します。

次のようなモデルがあると仮定しましょう。

public class Gift
{
    public string Name { get; set; }
    public double Price { get; set; }
}

最初のアクションとデータは次のようになります。

public ActionResult Index()
{
    var initialData = new[] {
        new Gift { Name = "Tall Hat", Price = 39.95 },
        new Gift { Name = "Long Cloak", Price = 120.00 },
    };
    return View(initialData);
}

一方、あなたの見解は次のようになります。

<h2>Gift List</h2>
What do you want for your birthday?

<% using(Html.BeginForm()) { %>
    <div id="editorRows">
        <% foreach (var item in Model)
            Html.RenderPartial("GiftEditorRow", item);
        %>
    </div>

    <input type="submit" value="Finished" />
<% } %>

ギフト エディターの部分ビューは次のようになります。

<div class="editorRow">
    <% using(Html.BeginCollectionItem("gifts")) { %>
        Item: <%= Html.TextBoxFor(x => x.Name) %>
        Value: $<%= Html.TextBoxFor(x => x.Price, new { size = 4 }) %>
    <% } %>
</div>

重要なのは、ASP.NET MVC の標準ではない「BeginCollectionItem」ヘルパー メソッドです。可変長モデルのいくつかのキーを生成します。後でファイルへのリンクを追加します。ハンドラーは次のようになります。

[HttpPost]
public ActionResult Index(IEnumerable<gift> gifts)
{
    // To do: do whatever you want with the data
}

このアプローチでは、テキストボックスに値が入力されたギフトのリストを取得します。もう 1 つアイテムを追加するには、このビューに ajax リクエストを送信する必要があります。

ソース: http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/ ダウンロード: http://blog.codeville.net /blogfiles/2010/January/ListEditorDemo.zip

于 2012-10-15T15:01:38.137 に答える