【问题标题】:Where is this "Too Many Characters in String literal" message coming from?这个“字符串文字中的字符太多”消息来自哪里?
【发布时间】:2010-12-10 10:30:00
【问题描述】:

大家早上好,

我确定这是给我的,但我不知道这个问题是从哪里来的。

我在一个视图中有以下几行:

<fieldset>
    <dl>
        <dt>
            <label for="FormTypes">Form Type:</label>
        </dt>
        <dd>           
            <% =Html.DropDownList("FormTypes", "All") %>
        </dd>
    </dl>
</fieldset>
<fieldset>
    <dl>
        <dt>
            <label for="Parts">Form Part:</label>
        </dt>
        <dd>           
            <% =Html.DropDownList("Parts", "All") %>
        </dd>
    </dl>
</fieldset>

这不会导致任何问题,但是在将以下脚本添加到顶部以根据表单类型的选择更新部件时(按照这个 SO 问题的答案Bind DropDownlists with JQuery in Asp.Net

<script type="text/javascript">
    <!--
        $('#FormTypes').change(function() {
            var val = $(this).val();
            $parts = $('#Parts');
            $.ajax({
                url: '<%= Url.Action('FormParts') %>',
                dataType: 'json',
                data: { ID: val },
                success: function(parts) {
                    $.each(parts, function(i, part) {
                        $parts.append('option value="' + part.ID+ '">' + part.Code + '</option>');
                    });
                },
                error: function() {
                    alert('Failed to retrieve parts list.');
                }
            });
        });

    //-->
</script>

(FormParts 操作将返回一个新对象以填充部件下拉列表)

我收到消息:字符文字中的字符过多

<% =Html.DropDownList("Types") %>

这个问题似乎是由添加的 javascript 引起的,但为什么以及为什么错误出现在标记中先前良好的代码行而不是脚本中?

提前致谢。

【问题讨论】:

    标签: asp.net javascript asp.net-mvc asp.net-ajax


    【解决方案1】:

    虽然您分离出来的行没有任何问题,但原始代码中的这部分确实让我感到困扰:

    <%= Url.Action('FormParts') %>
    

    您在 ASP 中为字符串使用了单引号。这将其标记为字符文字,而不是字符串。用双引号替换它们,你应该没问题。

    <%= Url.Action("FormParts") %>
    

    【讨论】:

    • 我也不喜欢它们的外观,但如果您在脚本中有 ASP.NET 指令,则假定是 javascript 约定。将更改为 " 并继续调试页面。谢谢 Matthew。
    • 这个答案用这个错误信息解决了我的问题。我用错误的方式引用了引号。我有DataSource="&lt;%# Eval('Items') %&gt;" 这给了我这个错误。我将其更改为DataSource='&lt;%# Eval("Items") %&gt;',错误消失了。
    • 根据@GiddyUpHorsey 的评论,引号很重要:双打内的单打失败,单打内的双打有效。但请注意,他还使用 打开标签而不是 语法。对我来说,这也很重要。 (我的案例是从母版页链接到外部 javascript 文件。)
    【解决方案2】:

    我不确定问题出在哪里,我已将脚本更新为以下内容并且可以正常工作。

    <script type="text/javascript">
        <!--
    
        $(function() {
            $('#FormTypes').change(function() {
                //clear all items in list and replace "All" option
                $parts = $('#FormParts');
                $parts.html("");
                $parts.append('<option value="">All</option>');
    
                var selectedValue = $(this).val();
                if (selectedValue != "") {
                    $.ajax({
                        url: '<%= Url.Action("FormParts") %>',
                        dataType: 'json',
                        data: { FormTypeID: selectedValue },
                        success: function(parts) {
                            //repopulate list with JSON objects
                            $.each(parts, function(i, part) {
                                $parts.append('<option value="' + part.ID + '">' + part.Code + '</option>');
                            });
                        },
                        error: function() {
                            alert('Parts list could not be retreived. \n Please use the feedback link to inform us');
                        }
                    });
                }
            });
        });
        //-->
    </script>
    

    对于使用此代码的任何人,请注意我已经添加了评估

    if (selectedValue != "")
    

    如果在第一个 FormTypes 下拉列表中选择了“全部”选项,则已添加此选项,没有应填充的依赖部件列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多