C# 扩展SelectList类后,SelectListItem未通过下拉菜单进行设置
我试图扩展SelectListItem类以添加另一个名为CardColor的属性。但是,当我尝试访问控制器中的属性时,我得到 NullReferenceException:对象引用未设置为对象的实例….C# 扩展SelectList类后,SelectListItem未通过下拉菜单进行设置,c#,selectlist,selectlistitem,C#,Selectlist,Selectlistitem,我试图扩展SelectListItem类以添加另一个名为CardColor的属性。但是,当我尝试访问控制器中的属性时,我得到 NullReferenceException:对象引用未设置为对象的实例…. 返回视图(“StringView”,c.IssueSelected.CardColor) 控制器: [HttpPost] public async Task<ActionResult> CardCreate(UpdateCardFormOptions c) { return
返回视图(“StringView”,c.IssueSelected.CardColor) 控制器:
[HttpPost]
public async Task<ActionResult> CardCreate(UpdateCardFormOptions c)
{
return View("StringView", c.IssueSelected.CardColor);
}
[HttpPost]
公共异步任务卡创建(UpdateCardFormOptions c)
{
返回视图(“StringView”,c.IssueSelected.CardColor);
}
看法
@使用(@Html.BeginForm())
{
问题类别*:@Html.DropDownListFor(c=>@Model.IssueSelected,Model.IssueList,new{@class=“form control”,@style=“width:350px”})
}
型号:
public IssueSelectListItem IssueSelected { get; set; }
public List<IssueSelectListItem> IssueList = new List<IssueSelectListItem>() {
new IssueSelectListItem() {Text="xxx", Value="yyy",CardColor="pink"},
};
public class IssueSelectListItem : SelectListItem
{
public string CardColor { get; set; }
}
public IssueSelectListItem IssueSelected{get;set;}
public List IssueList=新列表(){
新问题selectListItem(){Text=“xxx”,Value=“yyy”,CardColor=“pink”},
};
公共类问题SelectListItem:SelectListItem
{
公共字符串CardColor{get;set;}
}
这给了我一个线索,结果是我需要在视图中设置值CardColor,我不能只设置对象等价物。我的视图需要根据我的下拉选择设置CardColor,如下所示:
<p><label>Issue Category*:</label> @Html.DropDownListFor(c => @Model.IssueSelected.CardColor, Model.IssueList, new { @class = "form-control", @style = "width: 350px" })</p>
问题类别*:@Html.DropDownListFor(c=>@Model.IssueSelected.CardColor、Model.IssueList、new{@class=“form control”、@style=“width:350px”})
不会接受我自己的答案,仍然希望有人有更好的答案,这刚刚解决了我眼前的问题您的
问题SelectListItem
有点毫无意义,因为DropDownListFor()
方法接受IEnumerable
作为第二个参数,您的附加CardColor
属性被忽略。而且您的IssueSelected
属性没有任何意义,ans也永远不会正确绑定(您无法将
绑定到复杂对象-它只返回一个简单的值)。现在还不清楚你想用你的电脑做什么code@StephenMuecke我的目标是将多个参数传递到SelectList并能够保存所有参数,例如,根据他们选择的SelectListItem,我还想保留与iTunes关联的CardColor的信息。如果您不创建自己的扩展方法来创建
,则您不能传递文本
和值
属性以外的任何内容(如果您检查正在生成的html,您将看到没有CardColor=“pink”
属性。在任何情况下,
只回发一个简单的值—您所选选项的值(在您的情况下,该值将是“xxx”
)
<p><label>Issue Category*:</label> @Html.DropDownListFor(c => @Model.IssueSelected.CardColor, Model.IssueList, new { @class = "form-control", @style = "width: 350px" })</p>