我正在尝试将 IList 传递回我的视图,可以在 jQuery .each() 中访问它,但我没有任何成功。
示例类:
public class MyClass
{
private string _Name = "";
public int Id = null;
public MyClass ( string Name, int Id = null )
{
... Do something ...
}
public string Name
{
get
{
return _Name;
}
set
{
_Name = value;
}
}
}
在控制器中:
IList<MyClass> myClass = null;
myClass = GetNames();
ViewDataDictionary viewData = new ViewDataDictionary(null);
viewData.Add("myNames", Json(myClass));
// The string writer where to render the HTML code of the view
StringWriter stringWriter = new StringWriter();
// Render the Index view in a HTML string
ViewEngineResult viewResult = ViewEngines.Engines.FindView(ControllerContext,
"GeneratePDF", null);
ViewContext viewContext = new ViewContext(
ControllerContext,
viewResult.View,
viewData,
new TempDataDictionary(),
stringWriter
);
viewResult.View.Render(viewContext, stringWriter);
... Omitted for brevity ...
在视图中,我想使用 jQuery 来遍历 ViewData["myNames"]:
<script type="text/javascript">
_myNames = '@ViewData["myNames"]';
$.each(_myNames, function (i, item) {
...
});
</script>
以上不起作用,不幸的是我不确定如何调试它,因为 EvoPDF PDF Generator 正在调用视图。
我也在我的视图中尝试过这个:
<input type="hidden" id="myNames" value="@ViewData["myNames"]" />
<script type="text/javascript">
_myNames = $('#myNames').val();
$.each(_myNames, function (i, item) {
});
</script>
跟踪控制器代码(EvoPDF 呈现页面的位置),我可以看到隐藏字段包含值属性中的类型名称 - 而不是数据。
我已经多次使用 ViewData 没有问题,但这与我熟悉的用法有点不同。谁能告诉我如何使用 ViewData 传递 IList/List/IENumerable 以便我可以使用 jQuery .each() 对其进行迭代?
编辑
作为替代方案,我可以从我的剃须刀中进行 jQuery 调用,但我不确定如何将变量传递给 jQuery:
@foreach (var myName in (List<MyClass>)ViewData["myNames"])
{
<tr>
<td class="text-center">
<script type="text/javascript">
FormatName('@myName.Name', 1);
</script>
</td>
</tr>
}
但myName.Name
似乎没有被传递给 FormatName() 函数。我知道 myName.Name 包含一个有效值,因为它在没有 jQuery 的情况下呈现良好。如何将该 var 传递给我的 jQuery 函数?