未捕获的SyntaxError:意外的标记ILLEGAL。 Html.Partial()

时间:2014-05-29 08:00:36

标签: jquery asp.net-mvc partial-views

当我尝试使用@ Html.Partial()MVC方法来重新部分视图时,有javascript异常。以下是我的功能

function DisplayDynamicData(actionMethod) {
        var string = '';
        if (actionMethod == 'Edit') {
            string ='@Html.Partial("Edit", Model)'
            $('#divdisplay').html(string);
        }
        if (actionMethod == 'Create')
             string ='@Html.Partial("Create", Model)'
              $('#divdisplay').html(string);

    }

执行掏出

function DisplayDynamicData(actionMethod) {
        var string = '';
        if (actionMethod == 'Edit') {
            string ='<form action="/" id="formEdit" method="get"><input name="__RequestVerificationToken" type="hidden" value="KxJHl9hBr1WSIQhpp7aNmw8bAVbixn8-XV3n5c--_z9azhHYqSlAMkmS-LKY7uDM0Qdj07SNrdT5JrtACZvPKO6Y7F2Quoj9Bei4RCUZfbHga51Ad0aNN9RDPEziTMTd8vkzS6I2-2Xtl8vAlMFkzyn7wXnqYkRhUvieTYPMxrM1" /><input data-val="true" data-val-number="The field Id must be a number." data-val-required="The Id field is required." id="Id" name="Id" type="hidden" value="" />      <h2>Edit Product</h2>
    <div class="editor-label">
        <label for="Category">Category</label>
    </div>
    <div class="editor-field">
   ......'
       }
   }

我想,因为字符串在新行中呈现,所以会发生此错误。如何处理这个字符串。请在这里协助

1 个答案:

答案 0 :(得分:3)

不要使用字符串注入来创建复杂元素。这是一场维护噩梦(即使没有你当前的错误)。

1 - 将局部视图注入页面上的模板(假脚本块)

<script id="edittemplate" type="text/template">
      @Html.Partial("Edit", Model)
</script>

2 - 使用id

访问它
var edittemplate = $('#edittemplate').html();

3 - 随你随心所欲

$('#divdisplay').html(edittemplate);

根据需要重复多个模板,每个模板都在自己的脚本块中。

注意:我建议对要在jQuery中创建的任何动态元素采用类似的方法,因为内联HTML(包含文本替换标记)更易读,更容易修改。

更新(基于以下评论)

目的是通过在每个局部视图中没有隐藏的div来节省空间。将HTML放入代码不会减少页面加载大小,因为添加到页面的代码与HTML一样大。

您真正想要的(保持页面大小不变)是在需要时通过Ajax加载部分视图。

问题是每个局部视图都需要自己的Model数据,因此您必须将参数传递回服务器。通过仅将URL注入您的jquery来实现这一点:

e.g。像

这样的东西
function DisplayDynamicData(actionMethod) {
    var url;
    switch (actionMethod)
    {
        case 'Edit':
            url ='@Url.Action("Edit")';
            break;
        case 'Create':
            url ='@Url.Action("Create")';
            break;
    }
    $.ajax({ 
          url: url, 
          success: function(data){
                $('#divdisplay').html(data);
          }
    });
}

或代替ajax来电,更简单:

    $("#divdisplay").load(url);

我留给您填写插入Url.Actions的参数所需的细节