代码之家  ›  专栏  ›  技术社区  ›  StuperUser

“字符串文字中的字符太多”消息从何而来?

  •  0
  • StuperUser  · 技术社区  · 16 年前

    大家早上好,

    我在视图中有以下行:

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

    这不会导致任何问题,但在将以下脚本添加到的顶部时,会根据表单类型的选择更新零件(在回答此问题之后) 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 回复  |  直到 9 年前
        1
  •  9
  •   Matthew Scharley    16 年前

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

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

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

    <%= Url.Action("FormParts") %>
    
        2
  •  0
  •   StuperUser    16 年前

    <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”,则没有应填充的从属零件列表,则添加了此选项。