这个“字符串文字中的太多字符”消息来自何处?

时间:2009-10-27 10:29:21

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

早上好,

我确信这是一个给我,但我不知道这个问题来自哪里。

我在视图中有以下几行:

<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引起的,但是为什么以及为什么错误出现在标记中以前很好的代码行而不是脚本中呢?

提前致谢。

2 个答案:

答案 0 :(得分:9)

虽然您分开的行没有任何问题,但原始代码中的这一部分确实困扰我:

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

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

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

答案 1 :(得分:0)

我不确定该问题的来源,我已将脚本更新为以下内容并且有效。

<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下拉列表中选择了“All”选项,则添加了此选项,没有应该填充的相关部分列表。