小编Dal*_*Dal的帖子

System.DateTime的?vs System.DateTime

我正在写一些代码,我需要从我的页面中的Calendar控件读取日期值(Ajax工具包:日历扩展器).

代码如下:

DateTime newSelectedDate = myCalendarExtender.SelectedDate;
Run Code Online (Sandbox Code Playgroud)

给出以下错误:

Cannot implicitly convert type 'System.DateTime?' to 'System.DateTime'. An explicit conversion exists (are you missing a cast?)
Run Code Online (Sandbox Code Playgroud)

但是,通过插入一个演员我可以得到代码工作:

DateTime newSelectedDate = (DateTime)myCalendarExtender.SelectedDate; // works fine!
Run Code Online (Sandbox Code Playgroud)

日历控件的"SelectedDate"属性(Ajax工具包)将数据类型描述为"System.DateTime?" ......显然'?' 与所有这些有关.

当数据类型包含此符号时,究竟发生了什么?(?)...我假设我可以将'SelectedDate'属性直接应用于'DateTime'类型的变量而不进行强制转换.

谢谢

c# asp.net datetime

27
推荐指数
4
解决办法
6万
查看次数

ASP.NET C#静态变量是全局的吗?

今天我发布了一个小的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'关键字来停止每个人设置/读取的变量.

有什么想法吗?谢谢

c# asp.net variables static

20
推荐指数
2
解决办法
4万
查看次数

SQL GUID与整数

我最近开始了一项新工作,并注意到所有SQL表都使用GUID数据类型作为主键.

在我以前的工作中,我们使用整数(自动增量)作为主键,在我看来,它更容易使用.

例如,假设你有两个相关的表; Product和ProductType - 我可以轻松地交叉检查特定行的两个表的'ProductTypeID'列,以快速映射我脑中的数据,因为它易于存储数字(2,4,45等),而不是(E75B92A3- 3299-4407-A913-C5CA196B3CAB).

额外的挫折感来自于我想了解表格是如何相关的,遗憾的是没有数据库图表:(

很多人说GUID是更好的,因为您可以在C#代码中定义唯一标识符,例如使用NewID()而不需要SQL SERVER来执行此操作 - 这也允许您临时知道ID将是什么....但我已经看到有可能仍然检索'下一个自动递增的整数'.

DBA承包商报告说,如果我们使用Integer类型而不是GUIDS,我们的查询可以快30%...

为什么GUID数据类型存在,它真正提供了哪些优势?...即使是某些专业人士的选择,必须有一些很好的理由来解释为什么它的实现?

guid auto-increment sql-server-2008

13
推荐指数
3
解决办法
4522
查看次数

使用Web用户控件而不是Web窗体

过去两年我一直在使用ASP.NET(C#).我学到了很多,但还有更多要学习:)

我已经使用MasterPages,'Web用户控件'来处理标题,导航,页脚等内容.

我从未真正理解的一件事是为您的内容和逻辑使用"Web用户控件"的做法;

Home.aspx ------ Home.ascx
AboutUs.aspx ----- AboutUs.ascx
Ordering.aspx ---- Ordering.acsx
Run Code Online (Sandbox Code Playgroud)

在过去的几个月里,我一直在使用这个结构的一些项目.我知道这实际上是常见的做法,但我并不完全了解全部的好处.

我记得当我之前尝试过这种方法时,最终出现了像Gridview这样的控件的可怕的viewstate问题...一旦我把所有逻辑输出并放入.aspx页面,一切正常.

我现在意识到,也许我需要将Gridview添加到viewstate集合中......但这只会加深我理解为什么使用这种方法的困难 - 给定viewstate问题.

我完全理解"Web用户控件"在诸如标题,菜单,页脚等内容方面的优势......任何涉及重复的项目,但我看过的项目都有非常具体的页面/控件 - 换句话说,它不太可能要在其他任何地方重用--aspx页面只包含一个带有内容和逻辑的控件(.ascx),它只会在该页面上使用,而不是其他地方.

忽略"代码重用",这种方法还有哪些其他好处?

asp.net controls

9
推荐指数
2
解决办法
1297
查看次数

将struct类型的通用列表绑定到Repeater

我试图将通用列表绑定到转发器时遇到了一些问题.泛型列表中使用的类型实际上是一个结构.

我在下面构建了一个基本示例:

struct Fruit
{
    public string FruitName;
    public string Price;    // string for simplicity.
}


protected void Page_Load(object sender, EventArgs e)
{

    List<Fruit> FruitList = new List<Fruit>();

    // create an apple and orange Fruit struct and add to List<Fruit>.
    Fruit apple = new Fruit();
    apple.FruitName = "Apple";
    apple.Price = "3.99";
    FruitList.Add(apple);

    Fruit orange = new Fruit();
    orange.FruitName = "Orange";
    orange.Price = "5.99";
    FruitList.Add(orange);


    // now bind the List to the repeater:
    repFruit.DataSource = FruitList;
    repFruit.DataBind();

}
Run Code Online (Sandbox Code Playgroud)

我有一个简单的结构来模拟Fruit,我们有两个属性,分别是FruitName和Price.我首先创建一个类型为'FruitList'的空通用列表.

然后我使用结构(苹果和橙色)创建两个水果.然后将这些水果添加到列表中.

最后,我将通用列表绑定到转发器的DataSource属性... …

c# asp.net generics repeater list

7
推荐指数
1
解决办法
5844
查看次数

LINQ Lambda查询'select'不能与oData一起使用

我目前正在尝试了解LINQ的一些基础知识.我一直在使用LINQPad来查询Netflix OData源.

资料来源: http ://odata.netflix.com/v2/Catalog/

在使用lambda查询时,我似乎无法选择单个属性 - 理解查询完美无缺.我找到了一段代码,使用Netflix oData源上的lambdas执行更复杂的查询,这似乎适用于返回实体的一个属性.

// works fine
var compQuery = from t in Titles
                where t.ReleaseYear == 2007
                select new { t.Name };
compQuery.Dump();   



// fails: "Can only specify query options (orderby, where, take, skip) after last navigation."
var lambdaQuery = Titles
            .Where(t => t.ReleaseYear == 2007)
            .Select(t => t.Name);

lambdaQuery.Dump(); 


// works fine - found on SO.
var lambdaQuery2 = People
    .Expand("TitlesActedIn")
    .Where(p => p.Name == "George Lucas")
    .First()
    .TitlesActedIn.Select(t => t.ShortName);              

lambdaQuery2.Dump(); …
Run Code Online (Sandbox Code Playgroud)

c# linq odata

6
推荐指数
2
解决办法
9147
查看次数

构建电子邮件发件人服务

我有几个网络应用程序都利用发送电子邮件,无论是通过联系表格,还是某种通知更新等.

我发现的问题是,没有任何方法可以跟踪从Web应用程序发送的电子邮件,所以我想出了一个可能的解决方案:

图1. 电子邮件发件人服务流程图

这真的很直接 - 而不是让每个Web应用程序自己发送电子邮件,我想通过创建一个中央电子邮件发件人服务来统一该过程.

在基本术语中,每个应用程序只会在数据库的"出站电子邮件"表中使用"收件人","发件人","主题","内容"数据创建一行.

然后,电子邮件发件人服务(Win服务)将从发件箱中选择电子邮件,发送它们,然后标记为已发送.


即使我将"基本电子邮件"信息(来自,来自主题,内容)存储在数据库中,我真正想做的还是存储"MailMessage"对象本身,以便电子邮件发件人服务可以反序列化原始的MailMessage,因为这将允许任何应用程序完全自定义电子邮件.

以这种方式使用MailMessage对象有任何问题吗?

更新:另一个目标是存储已发送的电子邮件日志 - 因此使用数据库的原因.

c# asp.net mailmessage sql-server-2008

5
推荐指数
1
解决办法
3517
查看次数