gpt4 book ai didi

asp.net-mvc - ASP.NET MVC 内置对 DropDownList 编辑器模板的支持

转载 作者:行者123 更新时间:2023-12-04 05:41:01 27 4
gpt4 key购买 nike

有什么办法可以说我的 View 模型属性应该呈现为 DropDownList (以便我可以指定 DropDownList 项)?

我发现了很多自定义实现,但我想应该有一种内置的方式来实现这样一个基本的东西。

更新。 我正在通过 Html.EditorForModel 渲染我的模型方法,我不想使用 Html.DropDownListFor 之类的方法

最佳答案

除了 Nullable<bool> 之外,没有呈现下拉列表的内置模板。呈现 Not Set 的类型, Yes , No下拉菜单,但我认为这不是您要问的。

所以让我们建立一个。与往常一样,我们首先定义 View 模型,该模型将表示包含 2 个属性的下拉列表(一个用于选定值,一个用于可用值):

public class ItemViewModel
{
public string SelectedId { get; set; }
public IEnumerable<SelectListItem> Items { get; set; }
}

那么我们就可以有一个具有这个属性的标准 View 模型:
public class MyViewModel
{
public ItemViewModel Item { get; set; }
}

然后是一个将填充 View 模型的 Controller :
public class HomeController : Controller
{
public ActionResult Index()
{
var model = new MyViewModel
{
Item = new ItemViewModel
{
SelectedId = "2",
Items = new[]
{
new SelectListItem { Value = "1", Text = "item 1" },
new SelectListItem { Value = "2", Text = "item 2" },
new SelectListItem { Value = "3", Text = "item 3" },
}
}
};
return View(model);
}
}

和相应的 View ( ~/Views/Home/Index.cshtml ):
@model MyViewModel
@using (Html.BeginForm())
{
@Html.EditorForModel()
}

现在剩下的就是为 DropDownViewModel 定义一个自定义编辑器模板。类型( ~/Views/Shared/EditorTemplates/DropDownViewModel.cshtml ):
@model DropDownViewModel
@Html.DropDownListFor(
x => x.SelectedId,
new SelectList(Model.Items, "Value", "Text", Model.SelectedId)
)

并覆盖对象类型的默认模板以允许深度潜水,正如 Brad Wilson 在 his blog post 中解释的那样.否则默认情况下 ASP.NET MVC 不会递归到模板的复杂子类型。所以我们覆盖 ~/Views/Shared/EditorTemplates/Object.cshtml :
@foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForEdit && !ViewData.TemplateInfo.Visited(pm))) 
{
if (prop.HideSurroundingHtml)
{
@Html.Editor(prop.PropertyName)
}
else
{
<div class="editor-label">
@(prop.IsRequired ? "*" : "")
@Html.Label(prop.PropertyName)
</div>
<div class="editor-field">
@Html.Editor(prop.PropertyName)
@Html.ValidationMessage(prop.PropertyName, "*")
</div>
}
}

关于asp.net-mvc - ASP.NET MVC 内置对 DropDownList 编辑器模板的支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11498215/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com