如何在ViewBag中传递要在jquery中使用的对象?

时间:2014-03-04 10:47:33

标签: jquery asp.net-mvc asp.net-mvc-4 viewbag

我将ViewBag中的少量值传递给我的View,然后编写了一些jquery来读取和使用它。

public ActionResult Update(int id)
{
    ViewBag.ProductId = id;
    var settings = _service.GetAdvancedSettings();
    ViewBag.Settings = settings;
    return View();
}

只是为了让您了解我已发布从Setting方法返回的GetSettings()类。

public class AdvancedSettings 
{
    public bool ShowName { get; set; }
    public bool ShowQuantity { get; set; }
    public bool ShowPrice { get; set; }
}

我收到以下错误。

enter image description here

到目前为止,我能够读取并使用“id”的int值。我如何使用该对象及其值?

4 个答案:

答案 0 :(得分:4)

您可以将设置转换为json:

var settings = @(Html.Raw(Json.Encode(ViewBag.Settings)));

在这种情况下,您应该创建表示设置的视图模型类,以避免将来出现错误,如果设置将被更改且无法转换为json。

答案 1 :(得分:0)

在视图中使用隐藏的输入:

    <input type="hidden" id="AdvancedSettings_ShowName" value="@ViewBag.Settings.ShowName" />
    <input type="hidden" id="AdvancedSettings_ShowQuantity" value="@ViewBag.Settings.ShowQuantity" />
    <input type="hidden" id="AdvancedSettings_ShowPrice" value="@ViewBag.Settings.ShowPrice" />

然后调用js文件中隐藏输入的值:

var settings = {
    showName : $('#AdvancedSettings_ShowName').val(),
    ShowQuantity: $('#AdvancedSettings_ShowQuantity').val(),
    ShowPrice: $('#AdvancedSettings_ShowPrice').val()
}

答案 2 :(得分:0)

在控制器中声明Viewbag对象。在View中创建脚本var。现在你可以在你的js文件中使用var了。 Hete GetContainersUrl是具有json值的字符串。

<script>
    var SELECTED_BLOBS = "@ViewBag.GetContainersUrl";
</script>

在js文件中使用像这样

if (SELECTED_BLOBS != "") {
        var obj = JSON.parse(SELECTED_BLOBS);
}

答案 3 :(得分:0)

将值作为模型传递,然后使用System.Web.Helpers.Json对其进行编码。这是我使用的代码片段。

控制器

public ActionResult Update(int id)
{
    ViewBag.ProductId = id;
    var settings = _service.GetAdvancedSettings();
    ViewBag.Settings = settings;
    return View(settings);
}

查看

@model AdvancedSettings

<script type="text/javascript">
    $(document).ready(function () {
       var jsonSettings = "@System.Web.Helpers.Json.Encode(Model)";
       var settings = JSON.parse(jsonSettings.replace( /&(lt|gt|quot);/g , '"'));

       console.log(settings);
    });
</script>
}