2017-10-10 74 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 

設置數組和它的作品。

謝謝大家。