2012-03-12 5 views
0

現在、レポートビルダーをビルドする必要があるASP.NET MVC 3プロジェクトで作業しています。レポートモデルは一般的なもので、すべてのレポートに「実装」されていなければなりません。このレポートには、フィルタリング値(op select lists)と追加情報(yes-no-option)が含まれていなければなりません。レポートの最後に、列挙型のレポートのレイアウトが表示されます。ここで私が持っているコードは、レポートビルダモデルのため、これまでです:カスタムレポートビルダーモデルに問題があり、フィルタ条件の固定量にバインドする

public class ReportBuilderModel 
{ 
    public IList<FilterModel> FilterCriteria { get; set; } 
    public Dictionary<string, bool> AdditionalInformation { get; set; } 
    public ReportType ReportType { get; set; } 
    public String ReportName { get; set; } 

    public ReportBuilderModel() 
    { 
    } 

    public ReportBuilderModel(string reportName) 
    { 
    FilterCriteria = new List<FilterModel>(); 
    AdditionalInformation = new Dictionary<string, bool>(); 
    ReportName = reportName; 
    } 

    public void AddFilterCriteria(String fieldName, Object lookupObject) 
    { 
    FilterModel model = new FilterModel() 
    { 
     FieldName = fieldName, 
     LookupObject = lookupObject 
    }; 
    FilterCriteria.Add(model); 
    } 

    public void AddAdditionalInformation(String fieldName, bool defaultValue) 
    { 
    AdditionalInformation.Add(fieldName, defaultValue); 
    } 
} 

public class FilterModel 
{ 
    public String FieldName { get; set; } 
    public Object LookupObject { get; set; } 
} 

public enum ReportType 
{ 
    Detail, 
    List, 
    Form, 
    Transaction 
} 

次のように、この関連付けられたビューは次のとおりです。

@model EduTOOL.Models.ReportBuilderModel 
    @{ 
     ViewBag.Title = "Report Builder"; 
    } 
    @Html.LoadPartial(EduTOOL.Controllers.PartialViewName._EditorForLibraries) 
    @using (Html.BeginForm()) 
    { 
     <h2> 
      Build Report for @Model.ReportName</h2> 
     <div style="float: left; width: 35%; height: 20%;"> 
      <fieldset> 
       <legend>Filter Criteria</legend> 
       <table> 
        @foreach (var filter in Model.FilterCriteria) 
        { 
         String displayText = "Select a " + filter.FieldName; 
         <tr> 
          <td>@Html.DisplayFor(label => displayText) 
          </td> 
         </tr> 
         <tr> 
          <td>@Html.EditorFor(editor => filter.LookupObject) 
          </td> 
         </tr>           
        } 
       </table> 
      </fieldset> 
     </div> 
     <div style="float: left; width: 35%; height: 20%;"> 
      <fieldset> 
       <legend>Options</legend> 
       <table> 
        @foreach (var includeInfo in Model.AdditionalInformation) 
        { 
         String displayText = "Include " + includeInfo.Key + " information?"; 
         <tr> 
          <td>@Html.DisplayFor(label => displayText) 
          </td> 
         </tr> 

         <tr> 
          <td> 
           @Html.EditorFor(includeValue => includeInfo.Value) 
          </td> 
         </tr>    
        } 
       </table> 
      </fieldset> 
      <br /> 
      <br /> 
     </div> 
     <div style="float: right; width: 30%; height: 20%;"> 
      <fieldset> 
       <legend>Report Type</legend> 
       <br /> 
       <table> 
        @foreach (var reportType in Enum.GetValues(Model.ReportType.GetType())) 
        { 
         <tr> 
          <td> 
           @Html.DisplayFor(displayText => reportType) 
          </td> 
          <td> 
           @Html.RadioButtonFor(radio => reportType, reportType.ToString()) 
          </td> 
         </tr>          
        } 
       </table> 
      </fieldset> 
      <br /> 
      <br /> 
     </div> 
     <br /> 
     <input class="button cyan" value="Generate Report" type="submit" /> 
    } 

これらは、これらすべてのアクションコントローラのメソッドによって呼び出されます。

モデルのHTTPGETとHTTPPOSTの間に問題は発生しません。モデルをバインドする方法はわかりません。また、これがレポートウィザードを構築する良い方法であるかどうかを知りたいですか?レポート作成ウィザードで選択された値は、ビルダーを使用するコントローラーによって処理されます。ここでの考え方は、3つのオプションの選択された基準のリストを取得し、その基準を使用してレポートを生成することです。

サードパーティのコントロールを使用することはできません。どんな助けもありがとう。どうもありがとうございます!

+0

ポストにブレークポイントを設定した場合、モデルはnullですか?いずれかの値が入力されていますか? –

+0

POSTにブレークポイントを設定しましたが、すべてのモデルプロパティはnullです。私は物事の組み合わせでjqueryを実装し始め、モデルにいくつかのプロパティを追加しました。たとえば、選択したすべての値を含む文字列を作成します。 "Distributor = FedEx、Status = Active"を選択し、これをjqueryを使用してモデルプロパティ "SelectedCriteria"に保存します。 SelectedCriteriaプロパティの値がポストのブレークポイントに表示されます。しかし、次のようなアプローチが良いアプローチであるかどうかはわかりません。何かが気分が悪いと感じる。 – jacqijvv

答えて

1

FilterCriteriaのリストにバインドするため、nameプロパティが設定されているためバインド方法がわからないためです。基本的には画面上に入力要素がたくさんありますが、その上にどの要素をポストにバインドするかを識別できるように名前を付けることはできません。

ここでは、モデルバインディングに関する良い記事です。私はテキストボックスのように最初は単純なものをバインドすることをお勧めします。一覧に移動し、別のオブジェクト内のオブジェクトのリストを表示します。 Model Binding

+0

ありがとう、私はtommorrowを見て、それがどのように、南アフリカのここに夕方にちょっと遅くなっているかをお知らせします – jacqijvv

+0

ありがとう記事は非常に有用だった。 – jacqijvv