2012-01-30 7 views
0

RazorとMVC3を使用してViewModelをレンダリングしようとしています。何らかの理由で、私のSelectList(下のWidgetTypes)はレンダリングされません。なぜ誰にも光を当てることはできないのですか?同じ問題を引き起こすウィジェットの動的モデルを使用しているため、各フィールドの@ Html.EditorFor(m => m.SystemName)などを使用するようにビューを変更する必要はありません。@ Html.EditorForを使用しているときにMVC3がSelectListをレンダリングしない

私のViewModel:

public class CreateWidgetViewModel 
{ 
    [Required] 
    public string Title { get; set; } 

    [Required(ErrorMessage = "The System Name is required")] 
    [Display(Name = "System Name")] 
    public string SystemName { get; set; } 

    [Required] 
    [Display(Name = "Widget Type")] 
    public string WidgetType { get; set; } 

    [Required] 
    [Display(Name = "Widget Types")] 
    public SelectList WidgetTypes { get; set; } 
} 

マイコントローラー:

[HttpGet] 
public ActionResult Create() 
{ 
    var widgetTypes = from wt in _widgetService.WidgetTypes 
         select new 
         { 
          Name = wt.WidgetName, 
          WidgetType = wt.GetType().AssemblyQualifiedName 
         }; 

    var viewModel = new CreateWidgetViewModel 
    { 
     WidgetTypes = new SelectList(widgetTypes, "WidgetType", "Name") 
    }; 

    if (Request.IsAjaxRequest()) 
    { 
     return PartialView(viewModel); 
    } 
    return View(viewModel); 
} 

マイビュー:

@{ 
    ViewBag.CurrentPage = "widgets"; 
} 
<h2>@ViewBag.Title</h2> 
@using (Html.BeginForm()) 
{ 
    @Html.ValidationSummary(true) 
    <fieldset> 
     <div> 
      @Html.EditorFor(model => model) 
     </div> 
    </fieldset> 
    <div> 
     <input type="submit" value="Save" />&nbsp;or&nbsp;@Ajax.ActionLink("Back to list", "Index", "Widget", 
     new AjaxOptions { HttpMethod = "Get", UpdateTargetId = "ajax-replace" }) 
    </div> 
} 
+0

あなたのモデルでSelectListを使用することは、シリアライズ可能ではないため、良いことではありません。ステートサーバーをオンにするとトーストになります。 – gangelo

答えて

2

あなたがドロップダウンリストを生成したい場合はHtml.DropdownListForヘルパーを使用する必要があります。プロパティの一部としてSelectListをタイプとして使用したということは、デフォルトのエディタテンプレートが<select>ボックスをレンダリングするという意味ではありません。したがって、カスタムエディタテンプレートを作成する必要があります。

blog postを参照して、これらのデフォルトテンプレートの実装方法を確認してください。

+0

私はこれをしました。この方法で幸せではありませんが、ちょうど感謝する必要があります。 – Pieter

関連する問題