我有一个Session变量Session [" tblItems"],会话变量包含一个数据表。请在下面找到我的代码。
public JsonResult SaveItemToTable(string itemCode, int quantity, int Division)
{
try
{
DataTable dt = new DataTable("tblItems1");
if(!string.IsNullOrEmpty(Session["tblItems"] as string))
{
dt = (DataTable)Session["tblItems"];
DataRow[] i = dt.Select("ItemCode ='" + itemCode + "'");
if (i.Count() > 0)
{
for (int j = dt.Rows.Count - 1; j >= 0; j--)
{
DataRow dr1 = dt.Rows[j];
if (dr1.ItemArray[0].ToString() == itemCode)
{
dr1.Delete();
}
}
}
}
else
{
dt.Columns.Add("ItemCode", typeof(string));
dt.Columns.Add("Quantity", typeof(int));
dt.Columns.Add("Division", typeof(int));
}
DataRow dr;
dr = dt.NewRow();
dr["ItemCode"] = itemCode;
dr["Quantity"] = quantity;
dr["Division"] = Division;
dt.Rows.Add(dr);
Session["tblItems"] = dt;
return Json(1);
}
catch(Exception ex)
{
return Json(0);
}
}
当Session变量为空时,代码工作正常(仅限第一次)。 所有时间
if(!string.IsNullOrEmpty(Session["tblItems"] as string))
上面的代码返回false。即使会话变量包含值。
答案 0 :(得分:0)
您的测试返回false,因为您正在使用“安全演员”:如果无法进行转换,as
投射将返回null(有关C#指南的更多信息,请参阅{ {3}})。由于您尝试将数据表强制转换为字符串,因此即使会话变量具有值,也始终返回null。
要查看问题的真实性质,请尝试将其转换为:
if(!string.IsNullOrEmpty((string)Session["tblItems"]))
这会引发异常,因为您无法将数据表转换为这样的字符串。你需要像这样测试null:
if (Session["tblItems"] != null))
更新:看过上面的评论,我已经添加了一个更全面的例子来解释需要改变的内容。您的代码看起来应该更像这样:
DataTable dt;
if (Session["tblItems"] != null))
{
dt = (DataTable)Session["tblItems"];
...
}
else
{
dt = new DataTable("tblItems1");
...
}
DataRow dr;
dr = dt.NewRow();
...
请注意我所做的更改:如果有值,则会话从会话初始化dt
,在这种情况下,转换将起作用,当它为null时,构造一个新的。然后,您可以使用下面部分中的值而不会出现问题,因为它始终具有值。
此外,我还建议您根本不要将数据表存储在会话中,而只是存储您需要的值。
答案 1 :(得分:0)
要检查您的会话是空还是空(对于DataTable
):
private bool IsDataTableNullOrEmpty(object arg) =>
arg == null || ((DatTable)arg).Rows.Count == 0;