簡體   English   中英

如何將CS文件中的json變量傳遞給Javascript函數?

[英]How to pass a json variable from a CS file to an Javascript function?

我在C#中有一個方法,該方法創建用戶憑證的JSON對象。 以下是CS文件。

public string CreateLoginjson(string strErrorType, bool blIsAuthenticated)
{
    StringBuilder sbLoginJson = new StringBuilder();
    if (blIsAuthenticated)
    {
        sbLoginJson.Append("{LoginSuccess:1");
    }
    else
    {
        sbLoginJson.Append("{LoginSuccess:0");
    }

    if (strErrorType != string.Empty)
    {
        if (strErrorType.TrimEnd(new char[] { ',' }) == "Token" ||
                strErrorType.TrimEnd(new char[] { ',' }) == "BlankToken")
        {
            sbLoginJson.Append(",txtTestTokenNumber1:\"Error\"");
            sbLoginJson.Append(",txtTestTokenNumber2:\"Error\"");
            sbLoginJson.Append(",txtTestTokenNumber3:\"Error\"");
            sbLoginJson.Append(",txtTestTokenNumber4:\"Error\"");

        }


        if (strErrorType.TrimEnd(new char[] { ',' }) == "Password")
        {
            sbLoginJson.Append(",txtPassword:\"Error\"");

        }

        if (strErrorType.TrimEnd(new char[] { ',' }) == "UserName")
        {
            sbLoginJson.Append(",UserName:\"Error\"");

        }
        string strLoadErrorControlMessage = LoadErrorControl(strErrorType,
                string.Empty);

        if (strLoadErrorControlMessage!= string.Empty)
        {
            sbLoginJson.Append(",ErrorMessage:
            '" + strLoadErrorControlMessage + "'");
        }
    }
    sbLoginJson.Append("}");

    var LoginJson = sbLoginJson.ToString();
    return LoginJson;
}

現在,我需要將LoginJson傳遞給JS函數,該函數檢查是否提供了不正確的憑據,該函數查找控件並向其中添加屬性

function GetLoginJson(strLoginJson) {
    if (strLoginJson != '' && strLoginJson != undefined) {
        var objLoginJson = strLoginJson;

        if (objLoginJson.LoginSuccess == "1") {

        }
        else if (objLoginJson.LoginSuccess == "0") {

            if (objLoginJson.txtUserName != '' 
                 && objLoginJson.txtUserName != undefined) 
            {
                $('#txtUserName').attr("class", objLoginJson.txtUserName);
            }
            else 
            {
                $('#txtUserName').attr("class", "Input");
            }

            if (objLoginJson.txtPassword != '' 
                 && objLoginJson.txtPassword != undefined) 
            {
               $('#txtPassword').attr("class", objLoginJson.txtPassword);
            }
            else 
            {
                $('#txtPassword').attr("class", "Input");
            }
            if (objLoginJson.txtTestTokenNumber1 != '' 
                  && objLoginJson.txtTestTokenNumber1 != undefined) 
            {
                $('#txtTestTokenNumber1').attr("class", 
                                                objLoginJson.txtTestTokenNumber1);
            }
            else 
            {
                $('#txtTestTokenNumber1').attr("class", "Error");
            }
            if (objLoginJson.txtTestTokenNumber2 != '' 
                  && objLoginJson.txtTestTokenNumber2 != undefined) 
            {
               $('#txtTestTokenNumber2').attr("class", 
                                               objLoginJson.txtTestTokenNumber2);
            }
            else 
            {
                $('#txtTestTokenNumber2').attr("class", "Error");
            }

            if (objLoginJson.txtTestTokenNumber3 != '' && 
                 objLoginJson.txtTestTokenNumber3 != undefined) {
                $('#txtTestTokenNumber3').attr("class", 
                                                objLoginJson.txtTestTokenNumber3);
            }
            else 
            {
                $('#txtTestTokenNumber3').attr("class", "Error");
            }
            if (objLoginJson.txtTestTokenNumber4 != '' && 
                  objLoginJson.txtTestTokenNumber4 != undefined) {
                $('#txtTestTokenNumber4').attr("class", 
                                                objLoginJson.txtTestTokenNumber4);
            }
            else 
            {
                $('#txtTestTokenNumber4').attr("class", "Error");
            }

            $('#ErrorControl').html('');

        }
    }
}

我想將CS中的JSON變量傳遞給此jQuery語句$('#ErrorControl')。html('');'

謝謝

如果用戶提供所有信息並單擊某些東西(任何控件),則可以從jquery發出ajax請求。 如果要從CS返回一些錯誤消息,則可以將該消息直接用作

$('#ErrorControl')。html(response.d)

d =“您要從CS重播的字符串”。

其中,響應是成功功能的參數。 d是接收對象的默認屬性(變量)。

如果您不想直接顯示字符串,請使用返回的數據並調用另一個javascript函數。

謝謝

用戶1502890,

服務器端

我不太了解C#,但您似乎正在嘗試直接構建JSON字符串。 構造一個對象,然后使用內置語言命令或實用程序方法將其字符串化為JSON,這是更正常(更簡便,更可靠)的方法。 我想這在C#中一定是可能的。

客戶端

假設憑據字段采用id="credentialsForm"的形式,並且服務器端腳本可作為相對URL“ myCredentialsChecker.xtn”請求,則jQuery將如下所示:

$(function() {
    function loginResponse(j) {
        j = j || {};
        if (j.LoginSuccess) {
            //...
        }
        else {
            $('#txtUserName').attr("class", j.txtUserName ? j.txtUserName : "Input");
            $('#txtPassword').attr("class", j.txtPassword ? j.txtPassword : "Input");
            $('#txtTestTokenNumber1').attr("class", j.txtTestTokenNumber1 ? j.txtTestTokenNumber1 : "Error");
            $('#txtTestTokenNumber2').attr("class", j.txtTestTokenNumber2 ? j.txtTestTokenNumber2 : "Error");
            $('#txtTestTokenNumber3').attr("class", j.txtTestTokenNumber3 ? j.txtTestTokenNumber3 : "Error");
            $('#txtTestTokenNumber4').attr("class", j.txtTestTokenNumber4 ? j.txtTestTokenNumber4 : "Error");
            $('#ErrorControl').html('');
        }
    }

    $("#credentialsForm").on('submit', function() {
        $.ajax({
            url: "myCredentialsChecker.xxx",
            data: $(this).serialize(),
            type: 'POST', // or 'GET'
            dataType: 'json',
            success: function(j) {
                loginResponse(j);
            ),
            error: function() {
                loginResponse();
            }
        });
        return false;
    });
});

筆記

  • else{...}子句中的所有內容都如上所述進行了簡化,因為''undefined都是虛假的,因此只需測試foo即可完成工作。 if(){...} else{...}的三進制替代也使代碼緊湊。

  • 我不認為將類設置為返回的字符串是正確的做法,但是我沒有改變這一方面。

首先,您可以嘗試使用JavaScriptSerializer (鏈接該鏈接)將任何對象序列化為JSON,然后向客戶端發送字符串響應。

對於服務器和客戶端之間的通信,您可以使用jquery的ajax調用來調用Web服務(fe),或者,如果您構建ASP.NET網站或應用程序,則可以使用PageMethods並直接從javascript調用它。

如果您對PageMethods選項很感興趣,那么這里是一個很好而又簡單的教程

我終於寫了:CS文件為

public string CreateLoginjson(string strErrorType, bool blIsAuthenticated)
{
    StringBuilder sbLoginJson = new StringBuilder();
    if (blIsAuthenticated)
    {
        sbLoginJson.Append("{LoginSuccess:1");
    }
    else
    {
        sbLoginJson.Append("{LoginSuccess:0");
    }

    if (strErrorType != string.Empty)
    {
        if (strErrorType.TrimEnd(new char[] { ',' }) == "Token" || strErrorType.TrimEnd(new char[] { ',' }).Split(new char[] { ',' }).Contains("BlankToken"))
        {
            sbLoginJson.Append(",txtTestTokenNumber1:\"Error\"");
            sbLoginJson.Append(",txtTestTokenNumber2:\"Error\"");
            sbLoginJson.Append(",txtTestTokenNumber3:\"Error\"");
            sbLoginJson.Append(",txtTestTokenNumber4:\"Error\"");

        }

        if (strErrorType.TrimEnd(new char[] { ',' }) == "Password" ||  strErrorType.TrimEnd(new char[] { ',' }).Split(new char[] { ',' }).Contains("BlankPassword"))
        {
            sbLoginJson.Append(",txtPassword:\"Error\"");

        }

        if (strErrorType.TrimEnd(new char[] { ',' }) == "UserName" ||  strErrorType.TrimEnd(new char[] { ',' }).Split(new char[] { ',' }).Contains("BlankUserName"))
        {
            sbLoginJson.Append(",txtUserName:\"Error\"");
        }

        string strLoadErrorControlMessage = LoadErrorControl(strErrorType, string.Empty);

        if (strLoadErrorControlMessage != string.Empty)
        {
            PageTestApplicationLogin objPageTestApplicationLogin = new PageTestApplicationLogin(objClientConfiguration);
            sbLoginJson.Append(",ErrorMessage:'" + objPageTestApplicationLogin.GetTestApplicationLoginErrorHtml("", strLoadErrorControlMessage).Replace("'", "\"") + "'");
        }
        sbLoginJson.Append("}");
    }
    var LoginJson = sbLoginJson.ToString();
    return LoginJson;
}

JS文件:

if (objLoginJson.ErrorMessage != '' && objLoginJson.ErrorMessage != undefined) {
    $('#ErrorControl').html(objLoginJson.ErrorMessage);
    $('#ErrorControl').find('#tblLoginError').css('display', 'block');
}
else {
    $('#ErrorControl').html("");
    $('#ErrorControl').find('#tblLoginError').css('display', 'none');
}

謝謝大家的建議。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM