2011-02-03 12 views
4

まず、MVCを初めて使い、ASP.NET MVC3を試してみます。MVC3にパラメータとリストを含むフォームを作成する方法

私はこのようになりますページ構築したい:

開始日:[日付ボックス]終了日:[日付 ボックス] [検索ボタン]

[結果の表]

ユーザーは開始日と終了日を入力します(検証する必要があります)。次に、検索ボタンをクリックすると、一致する結果が戻ってきます。

これはどのように構造化されますか?ここではモデルクラスの私の考えだ:

public class ResultSearchModel 
{ 
    [Required] 
    [DataType((DataType.DateTime))] 
    [DisplayName("Start Date")] 
    public DateTime StartDate { get; set; } 

    [Required] 
    [DataType((DataType.DateTime))] 
    [DisplayName("End Date")] 
    public DateTime EndDate { get; set; } 

    public List<ServiceEntry> ServiceEntries { get; set; } 
} 

public class ServiceEntry 
{ 
    public DateTime Date { get; set; } 
    public string Code { get; set; } 
    public string Details { get; set; } 
} 

だから、私のインデックスのコントローラのアクションはResultSearchModelのインスタンスをcontructし、このモデルでビューを返す必要がありますか?

私はこれを1つのビューで行うのですか、またはリスト部分の部分的な表示が必要ですか?

答えて

3

私は、結果の表示テンプレートを使用します。

@Html.DisplayFor(x => x.ServiceEntries) 

をして、あなたはServiceEntriesコレクションの各要素に対してレンダリングされます、対応するテンプレート(~/Views/Home/DisplayTemplates/ServiceEntry.cshtml)を定義することができます。つまり、フォームをレンダリングするアクションと、フォームからPOSTを受け入れて検索を処理するアクションの2つのアクションを持つコントローラがあります。最初のアクションでは、結果が表示されないようにServiceEntriesプロパティを空のままにしてビューモデルを返し、2番目のアクションではこのプロパティを設定します。タイプとしてIEnumerable<ServiceEntry>も使用します。

+0

ありがとうダーリン - 私はこのような働きをしています。したがって、私のServiceEntry.cshtmlテンプレートは、各プロパティのtdを持つテーブル行になります。これを生成する良い方法があるか(つまり、ビューを追加...)、これを手作業でコードする必要がありますか? –

+0

@Craigでは、ServiceEntryには単一の行しか含まれません。 'DisplayTemplates'フォルダにAdd Viewで生成し、モデルとして' ServiceEntry'をピックアップすることができます。 –

関連する問題