簡體   English   中英

剃刀里面的JavaScript鍵值聲明?

[英]Razor inside javascript key value declaration?

鑒於需要將數據從Viewdata提取到javascript鍵/值對象中:

var stuff = {
    something : [@someVar.Prop2, @someVar.Prop3, etc]
};

我想使密鑰具有someVar.Prop1的“名稱”,以便:

var stuff = {
    @someVar.Prop1 : [@someVar.Prop2, @someVar.Prop3, etc]
};

但是,當我在上面的第二個代碼塊中使用表單時,在冒號處出現了Expected identifier, string or number錯誤:

@someVar.Prop1 : [@someVar.Prop2, etc]
---------------X (x marks the spot)

我該如何格式化剃刀代碼,以便它知道我要說的話?

您絕對不應該嘗試在Razor視圖中逐步構建JSON。 這很容易出錯。

要擴展@DLeh的答案,您可以做的是構建所需值的字典,在Razor視圖中將其序列化為JSON,然后將其分配給變量,如下所示

@{
    // Assume that someVar is provided from somewhere else; 
    // this is just for demonstration
    var someVar = new { Prop1 = "My Prop", Prop2 = "Prop Value", Prop3 = 7 };
}

@{
    var obj = new Dictionary<string, object>
    {
        {someVar.Prop1, new object[] { someVar.Prop2, someVar.Prop3 } }
    };
}
<script>
    var stuff = @Html.Raw(Json.Encode(obj));
</script>

渲染輸出:

<script>
    var stuff = {"My Prop":["Prop Value",7]};
</script>

您可以將剃刀表達式用引號'"括起來,以將它們輸出到javascript塊中。如果需要正確保留類型,可以使用parseInt()parseFloat()來實現。

例:

var stuff = {
    value1 : '@val1',
    value2 : [ parseInt('@val2'), parseInt('@val3') ]
};

如果您需要在賦值的左側成為變量,則可能需要構建一個json字符串,然后將其解析為對象。 像這樣的話,我的報價可能不正確。

var stuffJson = '{"@value1" : "@val1", "@value2" : "[ @val2, @val3 ]" }';
var stuff = JSON.parse(stuffJson);

如果您經常這樣做,則可能需要考慮在控制器中使用Json()方法來幫助您更輕松地構建它們。 您可以構建鍵/值字典,並輸出json:

public virtual ActionResult GetStuff()
{
    string value1 = "key1",
        value2 = "key2",
        val1 = "str1",
        val2 = "str2",
        val3 = "str3";
    var dict = new Dictionary<string, object>
    {
        { value1, val1},
        { value2, new List<string> { val2, val3} },
    };

    return Json(dict, JsonRequestBehavior.AllowGet);
}

輸出:

{"key1":"str1","key2":["str2","str3"]}

答案是在代碼運行並且不引發任何錯誤時忽略Visual Studio對問題的抱怨:

@country.CountryCode: ['@someVar.Prop1', '@someVar.Prop2', etc],

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM