如何计算 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
。
我有一个 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
。