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" /> or @Ajax.ActionLink("Back to list", "Index", "Widget",
new AjaxOptions { HttpMethod = "Get", UpdateTargetId = "ajax-replace" })
</div>
}
あなたのモデルでSelectListを使用することは、シリアライズ可能ではないため、良いことではありません。ステートサーバーをオンにするとトーストになります。 – gangelo