今天我发布了一个小的asp.net beta网络应用程序,允许内部员工修改一些产品信息.我们开始遇到用户覆盖彼此产品信息的问题......即使每个工作人员正在编辑一个完全不同的行(产品).
经过一些谷歌搜索,我想我知道发生了什么,它与静态变量的使用有关,下面是一个快速粗略的问题示例:
// EditProductGroup.aspx.cs
public partial class EditProductGroup : System.Web.UI.Page
{
private static int _groupId = 0;
protected void Page_Load(object sender, EventArgs e)
{
_groupId = Convert.ToInt16(Request.QueryString["GroupID"]);
// get existing ProductGroup information from database using
//_groupId to find the row and populate textboxes
}
private void saveProductGroupData()
{
// when user hits 'save changes' button, update row
//where the primary key column 'ProductGroupID' matches _groupId in the table
}
}
Run Code Online (Sandbox Code Playgroud)
因此,根据我的研究,一个静态变量实际上存在于整个应用程序中,这意味着如果多个用户正在使用该应用程序,他们将有效地读取"_groupId"的相同"值",并且在某些情况下实际设置它导致页面的另一个用户"实例"将数据保存到错误的行(ProductGroupId).
我的意图是静态变量与其他用户隔离,并且不应该是 - 每个用户都有自己的页面实例,因此他们自己的'_groupId'变量实例.
幸运的是,这一切都发生在dev/staging数据库而不是live db上.我不确定是否只需要删除'static'关键字来停止每个人设置/读取的变量.
有什么想法吗?谢谢
检测下载是否完成的最佳方法是什么,因为之后我想更新数据库.
我尝试了PHP手册中的一些代码,但它对我没有太大作用:
header("Content-Type: application/octet-stream");
header("Content-Length: ".filesize($file));
header("Content-Disposition: attachment; filename=$filename");
// buffered read not using readfile($file);
if ($fp = fopen($bestand, 'rb')) {
while (!feof($fp)) {
$buf = fread($fp, 4096);
echo $buf;
$bytesSent += strlen($buf); /* We know how many bytes were sent to the user */
}
}
if ($bytesSent == filesize($fp)) {
//do something with db
}
Run Code Online (Sandbox Code Playgroud) 我已将数据表绑定到a DataGridView,此数据表有一个名为"Status"的列,该列属于类型Boolean.我可以通过代码将值设置为true或者false正常.
但是,我无法弄清楚如何检查是否已经检查了给定的行.这是我试图使用的代码,并且编译它显示错误"指定的强制转换无效".
任何帮助,将不胜感激.
if (rowIndex >= 0)
{
var cbxCell = (DataGridViewCheckBoxCell)dgvScan.Rows[rowIndex].Cells["Status"];
if ((bool)cbxCell.Value)
{
// Do stuff
}
else
{
// Do other stuff
}
}
Run Code Online (Sandbox Code Playgroud) 偶尔我需要在放弃之前多次重试一次手术.我的代码是这样的:
int retries = 3;
while(true) {
try {
DoSomething();
break; // success!
} catch {
if(--retries == 0) throw;
else Thread.Sleep(1000);
}
}
Run Code Online (Sandbox Code Playgroud)
我想在一般的重试函数中重写它,如:
TryThreeTimes(DoSomething);
Run Code Online (Sandbox Code Playgroud)
在C#中有可能吗?该TryThreeTimes()方法的代码是什么?
我正在将用VB.NET编写的单元测试移植到用C#编写的大型项目中.然而,这个小曲子让我寻求帮助:
Public Sub object_DataChange(ByVal TransactionID As Integer, _
ByVal NumItems As Integer, _
ByRef ClientHandles As System.Array, _
ByRef ItemValues As System.Array, _
ByRef Qualities As System.Array, _
ByRef TimeStamps As System.Array) _
Handles myObject.DataChange
'' Does event code here
End Sub
Run Code Online (Sandbox Code Playgroud)
转换此活动的最佳方式是什么?此外,这是一个很好的实例,用于EventHandler<>将我的参数合并到一个结构中吗?
如果用户已授予我的网站发布流权限,我该如何检查javascript
?
我想获得一本书,它将真正让我全面了解使用C#,TDD,ASP.NET MVC,DDD和设计模式(如存储库模式)的现代ASP.NET开发.我非常能胜任C#和ASP.NET MVC,但想填补空白.
如果您对一两本涵盖这些主题的书籍有过良好的体验,请分享一下吗?
asp.net tdd asp.net-mvc domain-driven-design repository-pattern
我正在寻找任何3d bin打包算法的确定性实现,即在一个或多个较大的算法中包装许多小的和不同的长方体.解决方案可能与最佳解决方案不同.
它应该用C,C++,Java,C#,IronPython,IronRuby或任何其他可以从.Net代码中存储的语言编写.
我发现这个C算法http://www.diku.dk/hjemmesider/ansatte/pisinger/3dbpp.c,但它不会旋转长方体以找到最合适的.我没有将它们颠倒旋转,但应该可以进行水平旋转.
我正在尝试在jinja2中编写一个非常简单的树行走模板,使用一些具有重载特殊方法的自定义对象(getattr,getitem等)这看起来很简单,并且树的等效python行程工作正常,但是有一些东西关于Jinja的递归工作的方式,我不明白.代码如下所示:
from jinja2 import Template
class Category(object):
def __init__(self, name):
self.name = name
self.items = {}
self.children = True
def __iter__(self):
return iter(self.items)
def add(self, key, item):
self.items[key] = item
return item
def __getitem__(self, item):
return self.items[item]
def __getattr__(self, attr):
try:
return self.items[attr]
except KeyError:
raise AttributeError(attr)
def __str__(self):
return "<Category '%s'>" % self.name
template = '''
<saved_data>
{% for key in category recursive %}
{% set item = category[key] %}
{% if item.children %}
<category name="{{key}}">
{{ loop(item) }} …Run Code Online (Sandbox Code Playgroud)