使用部分视图、javascript和viewbag foreach时出错
我正在尝试使用JavaScript加载一个局部视图,反过来,局部视图将有一个“视图包”来循环。 一切都很正常,直到我尝试渲染局部视图,如果我移除局部视图加载的视图包循环,我会得到一个“对象””错误 控制器使用部分视图、javascript和viewbag foreach时出错,javascript,jquery,asp.net-mvc,asp.net-mvc-4,viewbag,Javascript,Jquery,Asp.net Mvc,Asp.net Mvc 4,Viewbag,我正在尝试使用JavaScript加载一个局部视图,反过来,局部视图将有一个“视图包”来循环。 一切都很正常,直到我尝试渲染局部视图,如果我移除局部视图加载的视图包循环,我会得到一个“对象””错误 控制器 [HttpPost] public ActionResult ServiceDetails(int id ) { int count = 0; var m = from c in db.ServiceCategor
[HttpPost]
public ActionResult ServiceDetails(int id )
{
int count = 0;
var m = from c in db.ServiceCategoryFields
where c.serviceTypeID == id
select c;
ViewBag.count = count;
ViewBag.m = m.ToList();
return PartialView(m.ToList());
}
局部视图
<table style ="width:100% ">
<tr>
@foreach (var image in (List<String>)ViewBag.m)
{
<td>
@image
</td>
}
</tr>
快速解决方案
基于下面的控制器代码
[HttpPost]
public ActionResult ServiceDetails(int id )
{
int count = 0;
var m = from c in db.ServiceCategoryFields
where c.serviceTypeID == id
select c;
ViewBag.count = count;
ViewBag.m = m.ToList();
return PartialView(m.ToList());
}
ViewBag.m
将是List
的一个实例,但您可以在局部视图中将其转换为List
@foreach (var image in (List<String>)ViewBag.m)
替代解决方案
以前的解决方案需要转换ViewBag.m
,如果将ViewBag.m
转换为错误的类型,则可能会产生运行时错误。使用此替代解决方案可以避免局部视图中的转换
首先要做的是创建一个模型类,该模型类将由局部视图使用,比如说类名是servicedtailsviewmodel
,它具有Count
和Images
属性
public class ServiceDetailsViewModel
{
public int Count { get; set; }
public List<string> Images { get; set; }
}
通过在局部视图代码顶部使用以下语法,将ServiceDetailsViewModel
设置为模型
@model ServiceDetailsViewModel
并在模型中循环。图像如下
<table style ="width:100% ">
<tr>
@foreach (var image in Model.Images)
{
<td>
@image
</td>
}
</tr>
@foreach(Model.Images中的var图像)
{
@形象
}
局部视图有模型吗?显示包含什么?应该是包含partialview的div。类似于:var display=$(“MySelector”)。在ajax调用之前设置。在使用display.html(数据)呈现它之前,您会得到什么响应;
?可能是因为发生了强制转换错误?LINQ查询是否返回字符串列表或复杂对象列表?我建议也使用或使用模型或viewbag,而不是两者都使用。ServiceCategoryField
类看起来像什么?
[HttpPost]
public ActionResult ServiceDetails(int id )
{
int count = 0;
var m = from c in db.ServiceCategoryFields
where c.serviceTypeID == id
select c.PropertyName;
ServiceDetailsViewModel model = new ServiceDetailsViewModel();
model.Count = count;
model.Images = m.ToList();
return PartialView(model);
}
@model ServiceDetailsViewModel
<table style ="width:100% ">
<tr>
@foreach (var image in Model.Images)
{
<td>
@image
</td>
}
</tr>