我有控制器方法来渲染PartialView并在那里显示SelectList
这是方法代码
public ActionResult AddProject()
{
ViewBag.Region = new SelectList(db.Regions, "Id", "Name").ToList();
return PartialView("/Partials/ProjectModalPartial");
}
以下是PartialView中的代码
<div class="form-group">
<label for="recipient-name" class="col-form-label">Выберите Город</label>
@Html.DropDownList("Region", null, "XXXX", htmlAttributes: new { @class = "form-control", @id = "cityId"})
</div>
以下是我在View中的称呼方式
<div class="modal-body">
@Html.Partial("~/Views/Manage/Partials/ProjectModalPartial.cshtml")
</div>
这是区域模型
public partial class Region
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Region()
{
this.Cities = new HashSet<City>();
}
public int Id { get; set; }
public string Name { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<City> Cities { get; set; }
}
但我有这个错误
没有类型为'IEnumerable'的ViewData项具有键'Region'。描述:发生了未处理的异常 在执行当前Web请求期间。请查看 堆栈跟踪以获取有关错误及其位置的更多信息 起源于代码。
异常详细信息:System.InvalidOperationException:没有 具有键的“IEnumerable”类型的ViewData项 '地区'。
来源错误:
第6行:第7行:ВыберитеГород 第8行:@ Html.DropDownList(“Region”,null,“XXXX”, htmlAttributes:new {@class =“form-control”,@ id =“cityId”})Line 9:第10行:
我该如何解决?如果我在代码中有这个SelectList,为什么会出现?
答案 0 :(得分:1)
您需要使用this Html.Action
overload来调用操作方法,操作将返回部分视图。 Html.Partial
只是将视图呈现为html而不调用操作,因此ViewBag.Region
没有预期的值:
@Html.Action("AddProject","Project")
假设控制器类名称为ProjectController
。
所以现在会发生的事情是Html.Action
将调用AddProject
操作,并将ActionResult
返回到我们调用的视图,并将呈现部分视图的html { {1}}