すべてのMVCの初心者が最初に「M」の単語を避けるが、それはちょっとMVCの頭字語の初めに開始しません。だから多分、多分、あなたはモデルを使ってあなたのソリューションを始めたいと思うかもしれません。
Do not Repeat Yourself(DRY)。オプションリストをビューに渡すすべてのコントローラに「新しいPageData()」をコピーして貼り付けることになります。次に、オプションを削除または追加し、すべてのコントローラーのPageDataを編集する必要があります。
また、不必要に冗長な "追加"、 "新規"、 "IS"、 "名前"を最小限に抑えてコードを入力する必要があります。選択オプション(および/またはラジオボタンリスト)にはキーと値のペアしかないので、できるだけ軽いデータ構造、つまり辞書をモデルに使用してください。
単純にモデルをコントローラで参照し、LINQラムダ式を含むDropDownListForを使用して、ビュー内のSelectListに辞書を変換します。
威嚇?あなたは一人じゃない。私は確かにあった。
MVCのモデル部分:ここで私は自分自身にM、V、およびCを教えるために使用される例です
using System.Web.Security;
using System.Collections.Generic;
using System.Text;
using System.Linq.Expressions;
using System.Web.Routing;
using System.Web.Helpers;
using System.Web.Mvc.Html;
using MvcHtmlHelpers;
using System.Linq;
// EzPL8.com is the company I work for, hence the namespace root.
// EzPL8 increases the brainwidths of waiters and bartenders by augmenting their "memories" with the identifies of customers by name and their food and drink preferences.
// This is pedagogical example of generating a select option display for a customer's egg preference.
namespace EzPL8.Models
{
public class MyEggs
{
public Dictionary<int, string> Egg { get; set; }
public MyEggs() //constructor
{
Egg = new Dictionary<int, string>()
{
{ 0, "No Preference"}, //show the complete egg menu to customers
{ 1, "I hate eggs"}, //Either offer an alternative to eggs or don't show eggs on a customer's personalized dynamically generated menu
//confirm with the customer if they want their eggs cooked their usual preferred way, i.e.
{ 2, "Over Easy"},
{ 3, "Sunny Side Up"},
{ 4, "Scrambled"},
{ 5, "Hard Boiled"},
{ 6, "Eggs Benedict"}
};
}
}
コントローラは、ちょうどモデルを渡して、今非常に簡単です。それは単なる概念ではなく、単なる単なる概念ではありません。:
public ActionResult Index()
{
var model = new EzPL8.Models.MyEggs();
return View(model);
}
ビューはDropDownListFor(代わりのDropDownListコントロール)を使用し、イベントのリファクタリングで強い型付けのためのラムダ式が必要です。
@Html.DropDownListFor(m => m.Egg, new SelectList(Model.Egg, "Key", "Value"))
ほら、結果のHTML:
<select id="Egg" name="Egg">
<option value="0">No Preference</option>
<option value="1">I hate eggs</option>
<option value="2">Over Easy</option>
<option value="3">Sunny Side Up</option>
<option value="4">Scrambled</option>
<option value="5">Hard Boiled</option>
<option value="6">Eggs Benedict</option>
</select>
注:辞書からのキーである<option value="6">
のVALUEと、テキスト/タイトル(例:Eggs Benedict)のSelectList()の "値"から混同しないでくださいhatはオプションタグの間で終わる。
ユースケース: は、私はめったに、もしこれまでに変更されないドロップダウンリストのためのデータベースクエリを避けるために、静的リストを作成したアプリケーションとデータベースの間のトラフィックを最小限に抑えるために。しかし、変化は避けられず、今から6ヶ月後に私の顧客のレストランで食堂が死ぬ。緑のハムのためではなく、彼らは卵にアレルギーがあり、料理人はワッフルでいくつかを混ぜたので。
レストランでは、食品アレルギーをすぐに反映するように顧客情報を更新する必要があります。彼らはリピート顧客を愛していますが、クレジットカードがキャンセルされたために支払う方法がないゾンビとして戻ってきた死んだ顧客が涼しいわけではありません。
修辞的質問:顧客の卵の選好に関連するすべてのコントローラとビューを変更する必要がありますか?または、{7、 "卵にアレルギー"}をモデルに挿入するだけですか?
もう1つの修辞的な質問:オムレツの卵はありませんか? {8、 "Omelette、Western"}、{9、 "Omelette、Mushroom-Feta-Spinach"}をモデルに一度追加して、新しい追加が自動的にすべてのドロップダウンリストに反映されるようにしますか?
1. * でモデルM * VC:
ボトムライン(S)これはおそらく、あなたが、のために尋ねた...しかし、あなたはMVCだけでなく、VCと言ったより道以上です。 2.選択リストが「プライマリキー」とタイトルだけに基づいている場合は、モデルで辞書を使用します。 3.静的リストがデータベースルックアップテーブルを使用していない場合、おそらくあまり役に立たないでしょう。静的リストにオプションを追加すると、データベース内の他のテーブルとの主キー/外部キー関係の完全性エラーを回避するために、ルックアップテーブルへの挿入を実行する必要があります。 4.ラムダと厳密に型指定されたデータ構造を使用して、エラーを回避し、先読みサポートを取得します。
私は私が行ったものであるので私の答えを選択しました。 – GONeale
これは正常に動作しますが、ドロップダウンで起動値としてDecimalをロードする場合はどうすればよいですか? – Sakthivel