C# 同一EditorTemplate的不同DropDownList选择值

C# 同一EditorTemplate的不同DropDownList选择值,c#,asp.net,.net,asp.net-mvc,C#,Asp.net,.net,Asp.net Mvc,我的观点如下: <div> @Html.EditorFor(model => model.Phone1) </div> <div> @Html.EditorFor(model => model.Phone2) </div> <div> @Html.EditorFor(model => model.Phone3) </div> 在控制器中,我有: ViewBag.PhoneTypeID = ne

我的观点如下:

<div>
  @Html.EditorFor(model => model.Phone1)
</div>
<div>
  @Html.EditorFor(model => model.Phone2)
</div>
<div>
  @Html.EditorFor(model => model.Phone3)
</div>
在控制器中,我有:

ViewBag.PhoneTypeID = new SelectList(db.PhoneTypes, "PhoneTypeID", "Type", PhoneTypeIDValue);
现在,这三个对象中的每一个都在下拉列表中获得相同的选定值,因为它们使用相同的SelectList对象

当我从控制器中填充这三个下拉列表并使用相同的editorTemplate时,是否有一种方法可以为它们提供不同的选定值

理想情况下,它看起来像这样:

ViewBag.Phone1.PhoneTypeID = new SelectList(db.PhoneTypes, "PhoneTypeID", "Type", Phone1.PhoneTypeIDValue);
ViewBag.Phone2.PhoneTypeID = new SelectList(db.PhoneTypes, "PhoneTypeID", "Type", Phone2.PhoneTypeIDValue);
ViewBag.Phone3.PhoneTypeID = new SelectList(db.PhoneTypes, "PhoneTypeID", "Type", Phone3.PhoneTypeIDValue);
但是,当我这样做时,我会得到错误:

无法对空引用执行运行时绑定


最后我用javascript完成了这项工作。我将这些值放在TempData中,然后在视图上查看TempData以设置这些值,因此看起来如下所示:

<div>
  @Html.EditorFor(model => model.Phone1)
</div>
<div>
  @Html.EditorFor(model => model.Phone2)
</div>
<div>
  @Html.EditorFor(model => model.Phone3)
</div>
控制器:

ViewBag.PhoneTypeID = new SelectList(db.PhoneTypes, "PhoneTypeID", "Type");
if(model.Phone1 != null)
{
   TempData["Phone1Type"] = model.Phone1.PhoneTypeID;
}
if (model.Phone2 != null)
{
    TempData["Phone2Type"] = model.Phone2.PhoneTypeID;
}
视图:


@EditorFor(model=>model.Phone1)
@EditorFor(model=>model.Phone2)
@节脚本{
$(文档).ready(函数(){
如果(“@TempData[“Phone1Type”]!=”){
document.getElementById(“Phone1_PhoneTypeID”)。selectedIndex=@TempData[“Phone1Type”];
}
如果(“@TempData[“Phone2Type”]!=”){
document.getElementById(“Phone2_PhoneTypeID”)。selectedIndex=@TempData[“Phone2Type”];
}
});
}

希望有帮助

我认为问题在于你的方法。改变

ViewBag.Phone1.PhoneTypeID = new SelectList(db.PhoneTypes, "PhoneTypeID", "Type", Phone1.PhoneTypeIDValue);
致:


根据您的
phoneTypes
属性,将
phoneType.Id
phoneType.type
更改为专有名称。

使用
aditionalViewData
EditorFor()的第二个参数)将您的常用
选择列表
传递给
编辑器或模板

在GET方法中,使用生成
SelectList

ViewBag.PhoneTypeList = new SelectList(db.PhoneTypes, "PhoneTypeID", "Type");
请注意,属性的名称不应与绑定到的属性相同(如果是,则会丢失客户端验证),并且在绑定到模型属性时,
SelectList
的第4个参数将被忽略

那么主视图中的代码应该是

@Html.EditorFor(m => m.Phone1, new { phonelist = ViewBag.PhoneTypeList })
@Html.EditorFor(m => m.Phone2, new { phonelist = ViewBag.PhoneTypeList })
编辑器模板中

@Html.DropDownListFor(m => m.PhoneTypeID, (IEnumerable<SelectListItem>)ViewData["phonelist "]), new { @class = "btn" })
@Html.DropDownListFor(m=>m.PhoneTypeID,(IEnumerable)ViewData[“phonelist”]),新的{@class=“btn”})
现在将根据
PhoneTypeID
属性的值选择每个dropdownlist中的正确选项


请注意,首选的方法是使用包含
SelectList
属性的视图模型,而不是使用
ViewBag

您可以编写
newselectlist项目{Value=“”,Text=“”}
;“填充时不同的选定值”是什么意思?@Hadee在呈现视图时,每个下拉列表应具有不同的选定值列表也应不同于每个下拉列表?不,列表是相同的,只是选择的选项不同
@Html.EditorFor(m => m.Phone1, new { phonelist = ViewBag.PhoneTypeList })
@Html.EditorFor(m => m.Phone2, new { phonelist = ViewBag.PhoneTypeList })
@Html.DropDownListFor(m => m.PhoneTypeID, (IEnumerable<SelectListItem>)ViewData["phonelist "]), new { @class = "btn" })