これがこれを尋ねる正しい場所であることを願っています。そうでない場合は、適切な場所を教えてください。
目的: ユーザーはドロップダウン リストから年と月を選択できます。フォームが送信されると、選択に基づいて情報を表示するチャートが生成されます。
実装: 私のコントローラーはIEnumerable<SelectListItem>
ドロップダウン リストごとに作成し、ビューに渡されるモデルに格納されます。ビュー内には、チャート化アクションへの呼び出しがあります。
コード:
コントローラ:
public ActionResult Validate(int month = 0, int year = 0)
{
//Check if input is valid
if (month != 0 && year != 0)
{
ViewBag.Valid = 1;
}
else
{
ViewBag.Valid = 0;
}
ValidateVM model = new ValidateVM();
//Populate years
model.year = Enumerable.Range(2008, DateTime.Now.Year - 2007).Reverse()
.Select(r => new SelectListItem
{
Value = r.ToString(),
Text = r.ToString()
});
//Populate months
string[] months = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" };
model.month = months
.Select((r, index) => new SelectListItem { Text = r, Value = (index + 1).ToString() });
return View(model);
}
モデル:
public class ValidateVM
{
public int[] Mdays { get; set; }
public IEnumerable<SelectListItem> month { get; set; }
public IEnumerable<SelectListItem> year { get; set; }
}
意見:
@using (Html.BeginForm("Mday", "Metrics", FormMethod.Get))
{
@Html.DropDownListFor(model => model.month, Model.month)
@Html.DropDownListFor(model => model.year, Model.year)
<input type="submit" />
}
@if (ViewBag.Valid == 1)
{
<img src="@Url.Action("ValidateChart", new { month = Request.QueryString["month"],
year = Request.QueryString["year"]
})" alt="Test"/>
}
質問: フォームが送信されると、すべてが正常に機能します。など、選択したアイテムの変数がモデルに含まれるメソッドを見てきましたint chosenMonth
。どちらかの方法で物事を行う利点はありますか?
私がした方法でビューバッグを使用しても大丈夫ですか? これを使用して、入力が有効かどうかをビューに伝えます。これにより、チャートを表示するかどうかが決まります。ビューバッグは絶対に使わないと何度も聞いたことがあります。どうしてこれなの?説明した動作をエミュレートするためのベストプラクティスは何ですか?
ValidateChart
(in view) 関数の呼び出しでは、を利用しquerystring
て、グラフを生成する月と年をアクションに伝える必要があります。これはバッド プラクティスとも呼ばれますが、これを行うためのより良い方法は見つかりませんでした。スコープquerystring
を経由せずに変数にアクセスする正しい方法は何ですか?request
このコードを動作状態にすることはできましたが、正しい方法で行う方法を学びたいと思っています。