2017-10-10 71 views
1

我有,我用它来创建一个对象下面JS代码:RAZOR JavaScript编码援助

var TransactionData = { 
    orderId: '@Model.Order.SalesOrderNumber.SelfOrDefault().FullOrderNuber', 
    curreny: "USD", 
    total: '@Model.Order.TotalSalesPrice', 
    items: [ 
     { 
      @foreach (var item in Model.Order.LineItems) 
      { 
       sku: item.ProductId, 
       quantity: item.Quantity, 
       price: item.AdjustedUnitPrice 
      } 
    }] 
} 

我需要通过了LineItem环在我的模型,以获得SKU,数量和价格。有1到x项需要创建。使用上面的代码,我会在sku :, quantity:和price:行中的逗号后出现“; expected”错误。最终我试图在项目中获得以下内容:

{ 
    "price" : "140", 
    "quantity" : "1", 
    "sku" : "156278" 
}, 
{ 
    "price" : "12.69", 
    "quantity" : "3", 
    "sku" : "908736" 
} 

我想我几乎在那里我只需要解决这个错误。有什么建议么?我对RAZOR上的JS生锈了,请耐心等待。

谢谢。

+0

你在混合服务器端和客户端代码。错误发生是因为您在C#中有JavaScript代码。 – David

+0

我会在我的控制器中创建TransactionData,将它作为viewbag传递给视图,使用json.encode,您将获得作为json对象的对象。 – Munzer

回答

0

这是正在完全解释为服务器端代码:

@foreach (var item in Model.Order.LineItems) 
{ 
    sku: item.ProductId, 
    quantity: item.Quantity, 
    price: item.AdjustedUnitPrice 
} 

其中,当然是一个语法错误,因为这些三线是无效的C#。相反,您希望将这些视为客户端代码,并将某些服务器端值发送到输出。事情是这样的:

@foreach (var item in Model.Order.LineItems) 
{ 
    <text> 
    { 
     sku: @item.ProductId, 
     quantity: @item.Quantity, 
     price: @item.AdjustedUnitPrice 
    }, 
    </text> 
} 

虽然,你投入到建设你的JavaScript结构剃刀代码中的更多的手动工作,你越开始辩解只是序列化的结构来代替。 This question是一个很好的开始。当然,你可以使用任何你喜欢的序列化器。

0

我相信正确的方式来操纵Razor内的JavaScript代码是用<text>标签封装它。

看到这个职位: Using Razor within JavaScript

希望能解决你的语法错误!

+0

正如上面的用户所评论的那样,我不认为操纵数据的最佳方式是使用Razor来操作JavaScript,但如果您打算这样做,那么标签应该可以使其工作。 –

0

这里是我终于结束了:

var items = [ 
    @foreach (var item in Model.Order.LineItems) 
     { 
      <text> 
       { 
        sku: '@item.Product.SKU', 
        quantity: '@item.Quantity', 
        price: '@item.AdjustedUnitPrice', 
        name: '@item.Product.Description.Name' 
       }, 
      </text> 
     } 
]; 

这将创建项目的数组,然后使用:

items: items 

设置数组和它的作品。

谢谢大家。