アップロードする Excel ファイルの行数に基づいて動的に生成するフォームがあります。説明の文字列を調べて、動的に生成されたドロップダウンリストを説明のテキストに基づいて指定された値に設定するロジックをどこに追加できますか? 次のようなチェックのリストを追加したい: 「blabla」が説明文字列にある場合は、ドロップダウンリストの値を 4 に設定します。
Javascriptでこれを行う必要がありますか? それは私にはそれほどきれいに感じられないからです。ビジネス ロジックをコントローラーで処理したいのですが、この設計でそれがどのようになるかわかりません。
私のコードは次のようになります。
プレビュー ページは、基本的に、Transaction という名前のエディター テンプレートにリンクするだけです。
@using (Html.BeginForm("Preview", "Import", FormMethod.Post))
{
<table border="1" style="border-color: #FFFFFF">
@Html.EditorFor(m => m.Transactions, new { Categories = Model.Categories })
</table>
<input id="btnSave" type="submit" value="Opslaan in database" />
}
このエディター テンプレート トランザクションでは、いくつかの静的データ、および以前に別のページにアップロードした Excel の各行のテキスト ボックスとドロップダウン リストを表示します。
<tr>
<td style="width: 40px; padding: 5px; background-color: @CurrencyHelper.GetCurrencyColor(Model.Amount)" align="right" nowrap="nowrap">@Html.Raw(CurrencyHelper.GetCurrency(Model.Currency, Model.Amount))
</td>
<td style="white-space: nowrap; padding: 5px;">@Model.DateTime.ToString("dd-MM-yyyy")
</td>
<td style="padding: 5px;">@Model.Description
</td>
<td style="padding: 5px;">@Html.EditorFor(m => m.ShortDescription)
</td>
<td style="padding: 5px;">@Html.DropDownListFor(m => m.CategoryId, new SelectList(ViewData["Categories"] as IEnumerable<Category>, "CategoryId", "Name"))
</td>
</tr>
ビューモデルにデータを入力するコントローラー:
//Attach unique Transactions and Categories to ViewModel
var viewModel = new ImportViewModel()
{
Transactions = uniqueTransactions.ToList(),
Categories = categoryRepository.GetCategories().OrderBy(c => c.Name).ToList()
};