gpt4 book ai didi

asp.net-mvc - 如何在编辑器模板中使用传递的选择列表

转载 作者:行者123 更新时间:2023-12-01 10:56:02 25 4
gpt4 key购买 nike

我正在尝试创建一个编辑器模板,它将为传递的选择列表中的每个值创建一个“ Bootstrap 样式”单选按钮(就像 Html.DropDownFor 方法创建一个下拉列表一样)

所以我在我看来有电话:

@Html.EditorFor(model => model.FaultTypeID,"RadioButtonList", 
new SelectList(Model.AllowdeFaultTypes, "FaultTypeID", "FaultTypeName"))

现在是 RadioButtonList 的模板:

@foreach (var item in ViewData["Items"] as SelectList)
{
<a>@item.Text</a> <b>@item.Value</b>
}

但转换失败,我得到一个 NullReferanceExeption .通过反射我看到 ViewData["Items"]值的类型是 System.Collections.Generic.List<CamelotFaultManagement.DAL.FaultType>

问题是我真的不想紧密耦合 RadioButtonList带有 CamelotFaultManagement.DAL.FaultType 的编辑器模板类,这样做没有任何意义。我想要一个通用的编辑器模板。

最佳答案

在您的编辑器模板中,您似乎使用了一些您从未设置过的 ViewData["Items"] 属性。如果你想使用这样的属性,请确保你已经分配了它:

@Html.EditorFor(
model => model.FaultTypeID,
"RadioButtonList",
new { Items = new SelectList(Model.AllowdeFaultTypes, "FaultTypeID", "FaultTypeName") }
)

话虽这么说,但您使用某些 ViewData 东西的方法对我来说似乎完全错误。

我会简单地定义一个 View 模型(就像在 ASP.NET MVC 中一样):

public class RadioListViewModel
{
public string Value { get; set; }
public IEnumerable<SelectListItem> Values { get; set; }
}

然后您可以将您的编辑器模板强类型化到这个 View 模型。当然,您的编辑器模板现在将存储在 ~/Views/Shared/EditorTemplates/RadioListViewModel.cshtml 中:

@model IRadioListViewModel
@foreach (var item in Model)
{
<a>@item.Text</a> <b>@item.Value</b>
}

现在剩下的就是在您的主视图模型中使用此 View 模型:

public class MyViewModel
{
public RadioListViewModel FaultTypes { get; set; }
...
}

然后在您的 View 中简单地呈现相应的编辑器模板:

@model MyViewModel
...
@Html.EditorFor(x => x.FaultTypes)

简单、常规、强类型。

关于asp.net-mvc - 如何在编辑器模板中使用传递的选择列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15067648/

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