0

スニペットを管理する最初のMVC(3)アプリケーションを構築しています。

明らかに、プログラミング言語(0. *から0.1)を持つスニペットの編集ページがあります。

今私の質問は、スニペットの編集ページに表示するために、現在のすべてのプログラミング言語でリストボックスを作成するにはどうすればよいですか?

ViewModelを作成し、手動でクエリしてリストとして渡すことですべての値を入力できると思いますが、MVCを構築した人は、これに対してより適切なソリューションを持っていると思いますか?Apressの「ProMVC3」と「ProEntityFramework」を手元に置いていますが、答えが見つからないようです。

私が試してみると:

@Html.EditorFor(model => model.Language or model.Language.Name) 

エラーが発生します。

よろしくお願いします。どんな助けでも大歓迎です!

4

2 に答える 2

0

同様のケースで私が行うことは次のとおりです。1)言語を編集するためのビューモデルを作成します

 public class LanguagesModel
{

    public IEnumerable<int> SelectedLanguageIds { get; set; }
    public MultiSelectList languages { get; set; }
}

2) コントローラーにモデルを入力します。

 public ActionResult Index()
    {
        List<Language> languages = _languageService.GetLanguages();//however you get  the languages from your datasource
         var temp = new MultiSelectList(
                            languages.Select(l => new { Value =  l.LanguageId.ToString(), Text = l.Name }),
                            "Value",
                            "Text");

        LanguagesModel model = new LanguagesModel();
        model.languages = temp;



        return View(model);
    }

3) DropDownListFor ヘルパーを使用するビューを作成します。

@model LanguagesModel

 @using (Html.BeginForm(Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype      = "multipart/form-data" })))
{
@Html.ValidationSummary(true)

<fieldset>
     @Html.ListBoxFor(m => m.SelectedLanguageIds, Model.languages)


<p>
        <input type="submit" value="Save" />
</p>
</fieldset>
}

"Index" と "Home" を実際に使用しているアクションとコントローラーに置き換えてください。

DropDownList の代わりに ListBox を使用するように変更されたコードを編集します。ダリン・ディミトロフの答えに触発されました

于 2012-07-28T07:50:57.187 に答える
0

ViewModelを作成できると思います

ポイントにまっすぐ!それはまさに私があなたにお勧めすることです。

ただし、ドメイン モデルに固執したい場合は、ListBox ヘルパーを使用できるようにするために、ビューでいくつかの適応を行うことができます (まったく推奨されない解決策ですが、基準に従ってより整然としたものを要求したため)

@model Snippet
@Html.ListBox(
    "SelectedIds", 
    new MultiSelectList(
        Model.Languages.Select(l => new { Value = l.ID.Tostring(), Text = l.Name }),
        "Value",
        "Text"
    )
)
于 2012-07-28T07:53:55.880 に答える