无法在jQuery中调用@ Html.Action()

时间:2017-06-08 19:13:14

标签: jquery asp.net asp.net-mvc razor asp.net-mvc-5

我正在尝试将我的部分视图中的html转换为主视图中带有id“searchpage”的div标记。但是,当我按照此答案中的语法How to append an Html.Action to the jquery时,我在chrome开发人员工具中收到错误,

 mAuth=FirebaseAuth.getInstance();
    mdatabase= FirebaseDatabase.getInstance().getReference().child("Department");
   mdatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            List<String> Department = (ArrayList<String>) dataSnapshot.getValue();
             DepartmentLIST=Department.toArray(new String[Department.size()]);

        }
       @Override
       public void onCancelled(DatabaseError databaseError) {
           Toast.makeText(CheckUpdate.this,databaseError.getMessage(),Toast.LENGTH_LONG).show();
       }

      });

    setListAdapter(new ArrayAdapter(this,
            android.R.layout.simple_list_item_1,DepartmentLIST));
}

代码是

Uncaught SyntaxError: Invalid or unexpected token

错误在$("#searchbutton").click(function () { $("#searchpage").html('@Html.Action("Search", "Employees")'); }); 专门突出显示。

2 个答案:

答案 0 :(得分:2)

我建议使用Ajax调用,并加载响应:

$("#searchbutton").click(function () {

    var url = '@Url.Action("Search", "Employees")';

    $.get(url)
        .done(function(response, status, jqxhr){
            $("#searchpage").html(response);
        });
});

如果要加载静态表单,请将其加载到模板脚本中并根据需要进行复制:

<script type="text/template" id="search-template">
    @Html.Action("Search", "Employees")
</script>

脚本中的某处:

$("#searchbutton").click(function () {

    var template = $('#search-template').clone().html();

    $("#searchpage").html(template);
});

我假设您看到的错误是因为您的HTML已格式化,因此您认为正在构建的“字符串”在生成的标记中实际上无效 - 它会有新行,这是一个问题JavaScript字符串。

答案 1 :(得分:1)

@Url.Action:只返回一个网址。

@Html.Action:调用指定的控制器名称和操作,并返回为html字符串

你不能使用$("#yourid").html('@Html.Action()'),因为这会执行Html.Action并返回数据,但jquery不能将其视为变量而无法按预期解释它。

实现目标有两个选择:

首先使用带有@UrlAction或字符串url的jquery ajax,然后将结果值解析为目标div。

$('#searchbutton').on('click', function() {
    $("#target").load("/Employees/Search"); 
});

第二个是使用jquery加载函数将模型数据的局部视图结果导入目标div。

// jquery
$('#searchbutton').on('click', function() {
    var $detailDiv = $('#searchpage');
    var url = '@Url.Action("Search", "Employees")';

    $.get(url, function(data) {
        $detailsDiv.replaceWith(data);
    });
});

// controller

public ActionResult Search()
{
    var model = GetModel(); // your function to get your model   
    return PartialView( "Search", model );
}

// html

<div id="searchpage">
    <!-- ...content... -->
</div>