如何计算 ASP.NET 中的 2 个字符串 C# WebMethod return JQuery

How to evaluate 2 strings in ASP.NET C# WebMethod return in JQuery

我有一个 WebMethod,它根据从 ASP.NET 按钮传递的参数更新 SQL 数据库。成功时 WebMethod returns 状态用于显示或隐藏 div。然而,Javascript 条件始终计算为 "Yes",即使 "No" 被传回。

控制:

<telerik:RadButton
        TabIndex="1"
        ID="Updated"
        runat="server"
        ButtonType="ToggleButton"
        ToggleType="Checkbox"
        AutoPostBack="false"
        OnClientToggleStateChanged="ButtonSelect"
        CommandArgument="Updated" 
        CommandName="Updated">
             <ToggleStates>
                  <telerik:RadButtonToggleState
                          Text="No" 
                          PrimaryIconCssClass="rbToggleRadio"> 
             </telerik:RadButtonToggleState>
             <telerik:RadButtonToggleState
                 Text="Yes" 
                 PrimaryIconCssClass="rbToggleRadioChecked"> 
             </telerik:RadButtonToggleState>
        </ToggleStates>
   </telerik:RadButton>

JQuery:

<script type="text/javascript">
    function ButtonSelect(button, args) {
        var state = args.get_currentToggleState().get_text();
        var whois = args.get_commandName();

        PageMethods.ButtonWebMethod(state, whois, onSucess, onError);

        //edited Stack Overflow Quetion here to == from =:
        function onSucess(returnstate) {
            if ((whois == "Updated") && (returnState == "Yes"))
            {
                $("#updateChoiceDIV").show();
                alert(returnstate + "Yep");
            }
            else if ((whois == "Updated") && (returnState == "No"))
            {
                $("#updateChoiceDIV").hide();
                alert(returnstate + "Nope");
            }
        }
        function onError(result) {
            alert('Cannot process your request at the moment, please try later.');
        }
    }
</script>

网络方法:

[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public static string ButtonWebMethod(string state, string whois)
{
    string returnState = state;
    HttpContext.Current.Session["FieldName"] = whois;
    if (state == "Yes")
    {
        HttpContext.Current.Session["" + whois + ""] = "True";
    }
    else if (state == "No")
    {
        HttpContext.Current.Session["" + whois + ""] = "False";
    }
    string strConnString = WebConfigurationManager.
                                ConnectionStrings["gatorConnectionString"].
                                ConnectionString;
    try
    {
        string sql = "UPDATE [User] SET " + 
                        HttpContext.Current.Session["FieldName"] + "='" + 
                        HttpContext.Current.Session["" + whois + ""] + 
                        "' WHERE Id = '" + HttpContext.Current.Session["newID"] + 
                        "' ";
        using (SqlConnection conn = new SqlConnection(strConnString))
        {
            conn.Open();
            using (SqlCommand cmd = new SqlCommand(sql, conn))
            {
                cmd.ExecuteNonQuery();
                conn.Close();
            }
        }
    }
    catch (SqlException ex)
    {
        string msg = "Update Error:";
        msg += ex.Message;
    }
    return returnState;
}

是的,我不擅长 Javascript 所以请善待....

好的,通过评论发现了几个问题。

  • 赋值 (=) 通常会 return 为真

这是因为赋值的结果是您为其设置的值,通常不是虚假值。

var x;
var y;

if (x = 1) { console.log(true); }
if (y = 0) {} else { console.log(false); }

比较值的正确方法是使用=====。如果您期望并要求这两个变量具有相同的类型(比较字符串到字符串或数字到数字),那么您应该使用 === 版本。但是,如果您希望允许逻辑将值强制为相同类型(例如将 1 与“1”进行比较),那么您应该使用 == 并且 javascript 会将它们强制为相同类型配对前输入。

  • returnstate != returnState

第二个问题是参数 returnstate 被提供给函数,但是内部逻辑引用 returnState 与前一个变量的大小写不匹配,所以它会所有表达式已 undefined