jquery中的ViewModel数据

时间:2012-07-03 03:36:53

标签: jquery asp.net-mvc-3

我一直在jquery中使用ViewModel的属性。虽然它运行良好,但我只是读取属性的值。为了使用jquery设置属性,我使用隐藏变量。请告诉我这是一个好习惯吗?

      if ("@Model.IsTemplate" == "@bool.FalseString") {
        $("#someButton").show();
        if ("@Model.Active" == "@bool.TrueString") {
            $("#activeschedulespan").show();
            $("#inactiveschedulespan").hide();
        }

请注意,这不是很好,但想知道这是好事还是坏事。如果不好,那么欢迎替代方案。

由于

2 个答案:

答案 0 :(得分:1)

这是非常糟糕的做法。我不会将服务器端Razor代码与javascript混合使用。我只是JSON序列化模型(或只是我需要的属性),然后直接操作它:

<script type="text/javascript">
    // we serialize the IsTemplate and Active properties of the model because we
    // only need them in javascript, but if we needed other properties we could have
    // included them as well or serialize the entire model
    var model = @Html.Raw(Json.Encode(Model.Select(x => new { x.IsTemplate, x.Active })));

    // now that we have the model javascript variable, let's manipulate it:
    if (!model.IsTemplate) {
        $('#someButton').show();
        if (model.Active) {
            $('#activeschedulespan').show();
            $('#inactiveschedulespan').hide();
        }
    }
</script>

但是,嘿,为什么我会觉得你使用javascript来做一些应该直接在服务器端完成的事情?在这个特定的例子中,您使用javascript根据您在服务器(您的模型)上知道的值显示/隐藏DOM中的内容。所以你可以完全摆脱这个javascript,并根据模型的属性决定是否在DOM中包含这些部分。

答案 1 :(得分:0)

我不认为这是一个问题。因为在浏览器中呈现时C#代码被编译为文本。如果您在浏览器中看到您的脚本,您会看到类似的内容。

  if ("True" == "True") {
    $("#someButton").show();
    if ("False" == "True") {
        $("#activeschedulespan").show();
        $("#inactiveschedulespan").hide();
    }

考虑@Model.IsTemplate = true和@Model.Active = false

您可以使用浏览器开发人员工具查看脚本。或者只是查看页面的来源并找到脚本。