我的控制器中有一个数组,我将其传递给我的视图,并且(暂时)我尝试ViewData
数组中的某些值(只是为了确保我正确地通过了数组。)
我试图通过console.log
发送它并通过Razor代码访问它,但是Razor不允许我执行任何javascript函数(例如function logValues()
{
console.log("test");
@{var capacity = ViewData["Capacity"] as string[]; }
for (var i = 0; i < 5; i++)
{
console.log(capacity[i]);
}
}
)。
我尝试了一些不同的解决方案,但无法提出任何有效的解决方案,这是让我最接近的解决方案:
查看
var uspCapacity = from d in db.uspGetEventKillSheetDetailedReport(option, date)
select new
{
d.Capacity
};
var uspCapacityList = uspCapacity.ToList();
ViewData["Capacity"] = uspCapacityList;
控制器
DynamodbSaveExpression saveExpression =
new DynamodbSaveExpression()
.withExpectedEntry("ItemId", new ExpectedAttributeValue().withExists(false)
.withConditionalOperator(AND)
.withExpectedEntry("ItemName", new ExpectedAttributeValue().withExists(false));
// saving the item to dynamodb
dynamodbmapper.save(itemToSave, saveExpression);
控制台将成功记录&#34;测试&#34;但无法访问我的容量变量..因为我在Razor中定义它并试图在Razor之外访问它。如何使用Javascript命令访问它?
答案 0 :(得分:2)
您可以将C#数组转换为JSON并将其分配给JS变量:
<script>
var capacity = @Html.Raw(Json.Encode(ViewData["Capacity"]));
// now you can use capacity like any other JS variable...
for (var i = 0; i < capacity.length; i++) {
console.log(capacity[i]);
}
</script>
Json.Encode
在System.Web.Helpers
中定义,并且应该在每个MVC项目中都可用。
答案 1 :(得分:1)
您当前的服务器代码正在为viewdata字典设置匿名对象的集合。它不是一个字符串数组。
ViewData["Capacity"] = (from d in db.uspGetEventKillSheetDetailedReport(option, date)
select d.Capacity).ToList();
这应该有效,假设此代码位于剃刀文件中
function logValues()
{
console.log("test");
var capacity = @Html.Raw(JsonConvert.SerializeObject(ViewData["Capacity"]))
for (var i = 0; i < 5; i++)
{
console.log(capacity[i]);
}
}
当razor执行上面的代码时,它会将我们设置为Viewdata字典的字符串列表序列化为数组初始化的字符串(例如:["Java","Swift","SQL","PHP","Ruby"]
),js会将该值设置为capacity
变量
JsonConvert
在Newtonsoft.Json
命名空间中定义。所以你需要将它导入你的剃须刀视图。
答案 2 :(得分:0)
试试这个:
function logValues()
{
console.log("test");
@{var capacity = (List<int>)ViewData["Capacity"]; }
@foreach (var s in capacity)
{
<text>console.log(@s)</text>
}
}