【问题标题】:Javascript list passing to c#传递给 c# 的 Javascript 列表
【发布时间】:2015-09-23 11:21:32
【问题描述】:

我有一个 Asp.net MVC 程序,我想在其中使用 Javascript 从视图中获取一个列表并将该列表传递给控制器​​。我希望列表中的变量是字符串类型,除了一个是 int32。 问题是列表为空或未通过。 我尝试使用 stringify 但它不能满足要求。

以下是 javascript 部分的代码:

$('#AddColumn').click(function () {

    var nodeURL = document.getElementById("IDHolder").innerHTML;
    var nodeConfig= nodeURL+".CONFIG";
    var nodeAdd=nodeURL+".CONFIG.AddColumn";
    var nodeName = $("#ColumnName").val();
    var nodeType = $("#ColumnType").data("kendoComboBox").value();
    var ListNodedet = [nodeName, nodeType];
    var Listmet = [nodeConfig, nodeAdd];
    var ListNodeDetails = JSON.stringify(ListNodedet);

    var ListMethod = JSON.stringify(Listmet);

    var select = 1;
    var url = "/Configuration/CallMethod";

    $.get(url, { ListNodeDetails:ListNodeDetails, ListMethod:ListMethod }, function (data) {
        $("#Data2").html(data);
    });
})

控制器的 C# 代码调用模型中的另一个方法:

 public bool CallMethod(List<Variant> ListNodeDetails, List <string> ListMethod)
    {
var AddMethod = RxMUaClient.CallMethod(ListNodeDetails, ListMethod, "127.0.0.1:48030");
        return AddMethod;
    }

模型:

public static bool CallMethod(List<Variant> ListNodeDetails, List<string> ListMethod, string iPAddress)
    {
        var serverInstance = GetServerInstance(iPAddress);
        if (serverInstance == null)
            return false;
        return serverInstance.CallMethod(ListNodeDetails, ListMethod);

    }

服务模式

     public bool CallMethod(List<Variant> ListNodeDetails, List<string> ListMethod)
    {
        try
        {
            if (_mSession == null)
            {
                return false;
            }
            NodeId objectID = NodeId.Parse(ListMethod[0]);
            NodeId Methodtype = NodeId.Parse(ListMethod[1]); ;
            List<Variant> inputArguments = ListNodeDetails;

            List<StatusCode> inputArgumentErrors = null;
            List<Variant> outputArguments = null;
            StatusCode error = _mSession.Call(
                objectID,
                Methodtype,
                inputArguments,
                new RequestSettings() { OperationTimeout = 10000 },
                out inputArgumentErrors,
                out outputArguments);
            if (StatusCode.IsBad(error))
            {
                Console.Write("Server returned an error while calling method: " + error.ToString());
                return false;
            }
            return true;
        }
        catch (Exception exception)
        {

            Console.WriteLine(exception.ToString());
            return false;
        }

    }

最后它使用 OPC UA 调用一些函数来添加数据。

【问题讨论】:

  • 请发布您的 C# 代码!
  • 字符串化传递给get()调用的数据,而不仅仅是它的属性。
  • @Archer 你能解释更多你的建议吗
  • 我已经修改了您的代码以显示我的意思,并将其作为答案发布在下面。
  • @Archer 非常感谢您的回答,它对我帮助很大

标签: javascript c# asp.net asp.net-mvc-3


【解决方案1】:

我已将其更改为 ajax 函数,它运行良好,但只有一个列表形式的列表传递给方法! 我不知道这是否是因为我从剑道框和文本框读取值,它们是不同的类型,但我尝试对其进行字符串化,但它仍然无法正常工作。在控制台上,两个列表都作为字符串输出。所以通过第一个列表“ListNodeDetails”仍然有问题!

$('#AddColumn').click(function () {

    var nodeURL = document.getElementById("IDHolder").innerHTML;
    var nodeConfig= nodeURL+".CONFIG";
    var nodeAdd=nodeURL+".CONFIG.AddColumn";
    var nodeName = $("#ColumnName").val().toString();
    var nodeType = $("#ColumnType").data("kendoComboBox").value().toString();
    var ListNodedet = [nodeName, nodeType];
    var Listmet = [nodeConfig, nodeAdd];
    var params = {
        ListNodeDetails: ListNodedet,
        ListMethod: Listmet
    };


    var url = "/Configuration/CallMethod";

    console.log(params);  // added sanity check to make sure data is correctly passed

    var temp = {
        url: "/Configuration/CallMethod",
        type: "POST",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        data: JSON.stringify(params),
        success: function (params) {
            window.location.replace(params.redirect);
        }
    };
    $.ajax(temp);

})

【讨论】:

    猜你喜欢
    • 2012-08-23
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 2013-02-23
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 2014-11-15
    相关资源
    最近更新 更多