如何在View中访问我的C#数组?

时间:2017-07-19 14:45:22

标签: javascript c# asp.net-mvc razor

我的控制器中有一个数组,我将其传递给我的视图,并且(暂时)我尝试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命令访问它?

3 个答案:

答案 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.EncodeSystem.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变量

JsonConvertNewtonsoft.Json命名空间中定义。所以你需要将它导入你的剃须刀视图。

答案 2 :(得分:0)

试试这个:

function logValues()
{
    console.log("test");      
    @{var capacity = (List<int>)ViewData["Capacity"]; }
    @foreach (var s in capacity)
    {
        <text>console.log(@s)</text>
    }
}