1

動的な (実行時に変化する) Web ページを作成する方法を見つけようとして、少し途方に暮れています。状況:

私は ASP .NET MVC3 Web アプリケーションを作成しており、ユーザーがオブジェクトを作成してオブジェクトを追加するページを作成したいと考えています- TariffTariffBandオブジェクトのリスト (以下のクラス定義)。各帯域には以下が必要です。TariffBandTariff.Bands

  • 下限のテキストボックス
  • 上限のテキストボックス
  • 単価のテキストボックス

ユーザーはビューに各 TariffBand の詳細を入力します。理想的には、タリフの次のバンドのテキスト ボックスの別のセットを表示/Tariff/Createするボタン ( ) がページにあることを望みます。"Add another band"

上記のテキスト ボックスの作成方法は理解していますが、上記の要件を満たすためにビュー ファイルを編集する方法がわかりません。部分ビューを使用する必要がありますか? または、javascript を使用して HTML を挿入しますか?

特にコードを探しているわけではありません (共有したい場合はお世話になりますが、これを達成するための最良の方法についてのガイダンスです。razor/c# では問題ありませんが、javascript/jQuery では n00b です。

私の最後の質問は、 @Html.TextboxFor() メソッドを使用せずに、テキストボックスなどに入力された値をビューのモデル属性にどのように割り当てるのですか? これを行う方法があるかどうかに興味があります。

これをグーグルで検索しようとすると、少し気が狂ってしまいます。

関税

class Tariff
{
    public int id {get; set;}
    public List<TariffBand> Bands {get; set}
}

関税帯

class TariffBands
{
    public int Id {get; set;}
    public int UpperLimit  {get; set;}
    public int LowerLimit  {get; set;}
}

どうもありがとう、デビッド

4

3 に答える 3

2

これは、ノンシーケンシャル インデックスを使用して実装できます。

まず、 Haacked のブログでそれらに関する一般的な情報を参照してください。

ブログから:

...リストにバインドする必要がある各項目に .Index サフィックスを付けた非表示の入力を提供します。これらの非表示の各入力の名前は同じであるため、前述のように、これにより、モデル バインダーは、リストにバインドするときに検索するインデックスの適切なコレクションを取得できます。

<form method="post" action="/Home/Create">

    <input type="hidden" name="products.Index" value="cold" />
    <input type="text" name="products[cold].Name" value="Beer" />
    <input type="text" name="products[cold].Price" value="7.32" />

    <input type="hidden" name="products.Index" value="123" />
    <input type="text" name="products[123].Name" value="Chips" />
    <input type="text" name="products[123].Price" value="2.23" />

    <input type="hidden" name="products.Index" value="caliente" />
    <input type="text" name="products[caliente].Name" value="Salsa" />
    <input type="text" name="products[caliente].Price" value="1.23" />

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

次に、この手法の原理を理解したら、html ヘルパーを使用してこれらを構築する可能性があります。

これらのヘルパーの 2 つのバージョンについて知っています。いずれかを選択するのはあなた次第です:

  1. Ivan Zlatev によるヘルパー(私はこれが好きです)
  2. スティーブン・サンダーソンのヘルパー
于 2012-07-27T21:06:58.597 に答える
0

すべてのコードを提供するわけではありませんが、モデルを作成すると役立ちます。

いくつかの jQuery を使用して、配列 (つまり、TariffBands[0].UpperLimit の id) を使用してクライアント上で動的に DOM 要素 (つまり、関税ごとの複数の関税バンド) を作成し、複数の関税バンドを動的に追加する機能を提供します。クライアント。POST すると、デフォルトのバインダーはそれを TariffBand の配列にバインドします (クライアントに正しい ID がある場合)。

私は複数のファイルのアップロードでこれを行います (つまり、UploadedDocuments[0] はクライアント名属性になり、その時点でのインデックスが何であれ、その名前の入力をいくつでも追加し、POST を繰り返してファイルを保存できます。

于 2012-07-27T20:27:33.357 に答える
0

EditorTemplateforを作成TariffBandしてビューで使用することもできます。このSOディスカッションで私の答えを確認してください

于 2012-07-28T09:15:26.727 に答える