MVC4 C#和淘汰赛。用C#值初始化ko.observable

MVC4 C#和淘汰赛。用C#值初始化ko.observable,c#,asp.net-mvc-4,knockout-mvc,C#,Asp.net Mvc 4,Knockout Mvc,是否有可能将C#变量写入ko.observable()变量? 例如,我有两个单选按钮(true和false)带有“data bind=”checked:isEvent”。我需要在渲染这两个单选按钮之前,使用@Model.isEvent初始化这个ko.observable—“isEvent”值,以检查正确的单选按钮。可以 isEvent = ko.observable(@Model.isEvent); 这将生成以下javascript: isEvent = ko.observable(true)

是否有可能将C#变量写入ko.observable()变量? 例如,我有两个单选按钮(true和false)带有“data bind=”checked:isEvent”。我需要在渲染这两个单选按钮之前,使用@Model.isEvent初始化这个ko.observable—“isEvent”值,以检查正确的单选按钮。

可以

isEvent = ko.observable(@Model.isEvent);
这将生成以下javascript:

isEvent = ko.observable(true);
是的,你可以

isEvent = ko.observable(@Model.isEvent);
这将生成以下javascript:

isEvent = ko.observable(true);

或者,可以将模型序列化为文档头部的单个变量,然后以这种方式访问属性,这样就不必在视图中包含整个视图模型

根据您的评论,下面是一个更完整的示例,说明这将如何工作

在布局页面中:

@using Newtonsoft.Json
<!-- this should already be referenced in your project, but if not use Nuget to install it -->
<!DOCTYPE html>
<head>
    <title>Title</title>
    <script type="text/javascript">
        var model = @Html.Raw(JsonConvert.SerializeObject(Model));
        //Alternatively, you can omit any serialization, and just use:
        var isEvent = @Model.isEvent;
    </script>
    <script src="path_to_view_model.js"></script>
</head>

或者,可以将模型序列化为文档头部的单个变量,然后以这种方式访问属性,这样就不必在视图中包含整个视图模型

根据您的评论,下面是一个更完整的示例,说明这将如何工作

在布局页面中:

@using Newtonsoft.Json
<!-- this should already be referenced in your project, but if not use Nuget to install it -->
<!DOCTYPE html>
<head>
    <title>Title</title>
    <script type="text/javascript">
        var model = @Html.Raw(JsonConvert.SerializeObject(Model));
        //Alternatively, you can omit any serialization, and just use:
        var isEvent = @Model.isEvent;
    </script>
    <script src="path_to_view_model.js"></script>
</head>

我不需要序列化整个对象,我只需要一个字段。另外,这在视图中(不是主布局),所以我实际上没有“head”。我在主布局中声明这一点有点问题,因为模型并不总是类型,它有isEvent字段。在这种情况下,您可能需要使用@RenderSection()。在布局页面中,您可以在文档的head部分执行类似于@RenderSection(“head”,false)的操作。false参数使该部分不再是必需的。然后在视图中,您可以使用@section{…},其中的任何代码都将插入到文档的中,但这是序列化整个模型的优点,而不仅仅是序列化所需的变量。即使模型为null,JsonConvert.SerializeObject()将只输出var model=null;然后您可以使用Javascript测试是否定义了某些内容。此外,如果您最终需要访问更多变量或复杂的数据结构,那么您将在以后对代码进行更少的修改。例外情况是,如果您的模型包含的大型数据结构ld不必要地增加了加载时间。最后我得到了这个工作:)并感谢关于@RenderSection的信息。这是我第一次遇到这个助手。非常方便:)我不需要序列化整个对象,我只需要一个字段。而且这是在视图中(不是主布局),所以我实际上没有“头”“好了。我在主布局中声明这一点有点问题,因为模型的类型并不总是有isEvent字段。在这种情况下,您可能需要使用@RenderSection()。在布局页面中,您可以在文档的head部分执行类似于@RenderSection(“head”,false)的操作。false参数使其成为不需要的部分。然后在您的视图中,您可以使用@section{…},其中的任何代码都将插入到文档的中,但这是序列化整个模型的优点,而不仅仅是您需要的变量。即使模型为null,JsonConvert.SerializeObject()也只会输出var model=null;然后可以使用Javascript测试是否定义了某些内容。此外,如果您最终需要访问更多的变量或复杂的数据结构,那么以后对代码的修改就会更少。例外情况是,如果您的模型包含会不必要地增加加载时间的大型数据结构。最后,我实现了这一点:)并感谢您提供有关@RenderSection的信息。这是我第一次见到这个助手。非常方便:)我应该把这个定义放在哪里?在任何需要初始化它的Javascript代码中。我应该把这个定义放在哪里?在任何需要初始化它的Javascript代码中。