0

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

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

请不要说这很好用,但想知道它是好还是坏。如果不好,那么欢迎替代品。

谢谢

4

2 回答 2

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 中。

于 2012-07-03T06:31:00.777 回答
0

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

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

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

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

于 2012-07-03T04:02:49.880 回答