繁体   English   中英

从 JavaScript 调用 C# 方法并返回一个字符串

[英]Call C# method from JavaScript and return a string

我正在尝试创建一个 web 页面,该页面显示 SQL 服务器中表中的列。 若干列必须具有 select 列表,并且若干列的值必须根据所选项目而改变。 例如,我有一个名为Accounts的表,其中包含AccountNumberAccountName列。 我希望 web 页面上的 AccountName 单元格根据 select 列表中的 AccountNumber 选择进行更改。 I've tried using JavaScript and jQuery to pass the AccountNumber to a C# method that gets the AccountName , but when I make a selection and debug I get an error saying that the parameter the method received can't be null.

JavaScript

function getAccountNumber(x) {
        var selectedAccountNumber = document.getElementById(x.id).value;
        var isNumber = isNaN(selectedAccountNumber);
        if (!isNumber) {
            var accountNumber = parseInt(selectedAccountNumber, 10);
            var accountName = $.post('@Url.Action("GetAccountName", "Statements")', accountNumber);
            alert(accountName);
        }
    }

C#

public string GetAccountName(int ID)
{
    var item = db.Accounts.Where(acc => acc.AccountNumber == ID).Select(acc => acc.AccountName).Single();
    return item;
}

我不知道为什么它没有正确传递参数。

检查下面的代码

[HttpPost]
public string GetAccountName(int ID)
{
  JavaScriptSerializer js = new JavaScriptSerializer();
  var item = db.Accounts.Where(acc => acc.AccountNumber == ID).Select(acc => acc.AccountName).Single();
  return js.Serialize(item.ToString());

}

var accountNumber = parseInt(selectedAccountNumber, 10);
var targetUrl= "@Url.Action("GetAccountName", "Statements")"+ "?ID=" + accountNumber;
$.post(targetUrl, function (data) {
  alert(data);
});

我认为这段代码的问题是您作为参数传递的 object,它必须是列表类型:


    $.post('@Url.Action("GetAccountName", "Statements")', {ID: accountNumber }, function(htmlexterno){
           $("#cargaexterna").html(htmlexterno);

问题是:你不能。 直接调用代码....您需要调用端点。 也就是暴露代码 c# 这通常是通过 Web 项目 (MVC) 完成的。 您需要首先修复如何暴露 c#,然后使用 java 脚本。

[ApiController]
[Route("[controller]")]
public class SomeNameController : ControllerBase
{
    public SomeNameController()
    {

    }

    [HttpPost]
    public string Get((int id)
    {
        return "cat";
    }
}

更新

JS

var accountNumber = parseInt(selectedAccountNumber, 10);
var data { id : accountNumber };
var url = '@Url.Action("GetAccountName", "Statements")';
$.post(url, data);

我试图让它尽可能简单,即使用常规的 JQuery function 和 MVC controller。

服务器端

 public ActionResult GetAccountName(string accountNumber)
 {
    return Content("Account name of " + accountNumber);
 }

客户端(脚本)

<script language="javascript">
    $(document).ready(function () {
        $(".accountnumbers").change(function () {
            var accountNumber = $(this).val();
            var labelToUpdate = $("#" + $(this).data("label"));

            console.log(labelToUpdate);

            $.ajax({
                url: '@Url.Action("GetAccountName", "Home")',
                data: { "accountNumber": accountNumber},
                success: function (data) {

                    labelToUpdate.html(data);
                }
            })

        })
    });
</script>

为简单起见,我使用了 static 控件 ID,如果您有多个帐号字段,则可以使其动态化。

客户端 HTML

<table>
<tr>
    <td>
        Account Number
    </td>
    <td>
        Account Name
    </td>
</tr>
<tr>
    <td>
        <input type="text" id="txtAccountNumber_1" class="accountnumbers" data-label="lblAccountName_1" />
    </td>
    <td><label id="lblAccountName_1"></label></td>
</tr>
</table>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM