現在、レポートビルダーをビルドする必要がある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つのオプションの選択された基準のリストを取得し、その基準を使用してレポートを生成することです。
サードパーティのコントロールを使用することはできません。どんな助けもありがとう。どうもありがとうございます!
ポストにブレークポイントを設定した場合、モデルはnullですか?いずれかの値が入力されていますか? –
POSTにブレークポイントを設定しましたが、すべてのモデルプロパティはnullです。私は物事の組み合わせでjqueryを実装し始め、モデルにいくつかのプロパティを追加しました。たとえば、選択したすべての値を含む文字列を作成します。 "Distributor = FedEx、Status = Active"を選択し、これをjqueryを使用してモデルプロパティ "SelectedCriteria"に保存します。 SelectedCriteriaプロパティの値がポストのブレークポイントに表示されます。しかし、次のようなアプローチが良いアプローチであるかどうかはわかりません。何かが気分が悪いと感じる。 – jacqijvv