如何在Javascript中调用控制器方法

时间:2018-08-30 14:26:01

标签: javascript asp.net-mvc

美好的一天

我下面的javascript函数填充了proposalwaitingapproval,它可以很好地加载所有内容,但是问题是当我单击编辑按钮时:

  cell += '<a href="@Url.Action("Create", "Home", new { id = proposal.Id })" class="btn btn-link" style="text-decoration:none">';
            cell += '<i class="fa fa-pencil-square-o" aria-hidden="true"></i> Edit';
            cell += '</a>';

当我单击“编辑”按钮时,不会从控制器调用方法,这是url结果:http://localhost:61759/@Url.Action(

function PopulateProposalWaitinApprovalTable() {

var table = $('#tblProposalsAwaitingApproval');
abp.ui.setBusy(table);
_proposalService.getWaitingApprovalProposals(true).done(function (data) {

    var receivedData = data;
    var htmlString = '';
    for (var element in data.items) {
        if (data.items.hasOwnProperty(element)) {
            var recievedData = data.items[element];


            var row = '<tr>';
            var cell = '<td style="vertical-align: middle">'+recievedData.id+'</td>';
            cell += '<td style="vertical-align: middle">' + recievedData.application +'</td>';
            cell += '<td style="vertical-align: middle">' + recievedData.dealName + '</td>';
            cell += '<td style="vertical-align: middle">' + recievedData.dealCompanyName + '</td>';
            cell += '<td style="vertical-align: middle">' + recievedData.contactFullName + '</td>';
            cell += '<td style="vertical-align: middle">' + recievedData.creationDate + '</td>';
            cell += '<td style="vertical-align: middle">' + recievedData.lastUpdatedDate + '</td>';
            cell += '<td>';
            if (!recievedData.isApproved)
            {
                cell += '<a href="@Url.Action("Create", "Home", new { id = recievedData.id })" class="btn btn-link" style="text-decoration:none">';
                cell += '<i class="fa fa-pencil-square-o" aria-hidden="true"></i> Edit';
                cell += '</a>';
            }
            else
            {             
                //@*<button type="button" class="btn btn-link" id="btnCreateRevision" data-toggle="modal" data-target="#RevisionModal" data-content=@proposal.Id><i class="fa fa-clone" aria-hidden="true"></i> @L("CreateRevision")</button>*@
            }
        cell += '</td>';
        row += cell + '</tr>';

        htmlString += row;
        }

        $('#tblProposalsAwaitingApproval > tbody').append(htmlString);
    }
}).always(function () {
    abp.ui.clearBusy(table);
});

}

2 个答案:

答案 0 :(得分:0)

应该是这样。问题是它在客户端执行

cell += '<a href="Home/Create/id=recievedData.id" class="btn btn-link" style="text- 
decoration:none">';
        cell += '<i class="fa fa-pencil-square-o" aria-hidden="true"></i> Edit';
        cell += '</a>';

答案 1 :(得分:0)

您不能在Javascript中使用Razor语法。请记住,Razor只是一种输出HTML的好方法,并且在呈现页面之前由MVC解决。呈现页面后,JavaScript便会运行,因此您在该点注入到页面中的任何Razor都不会得到处理。

您在这里有两个选择。像Chaminda所示那样硬编码Javascript中的URL,或者在页面上有一个隐藏元素,您可以像这样读取值:

@Html.Hidden("homeUrl", Url.Action("Create", "Home"))

然后,您可以使用Javascript从页面中读取值:

 cell += '<a href="' + $('#homeUrl').val() + '?id=' + recievedData.id + '" class="btn btn-link" style="text-decoration:none">';
            cell += '<i class="fa fa-pencil-square-o" aria-hidden="true"></i> Edit';
            cell += '</a>';