小编Sai*_*udo的帖子

正则表达式与模式匹配或为空?

我需要匹配模式的正则表达式或为空.

现在我有一个表达......

"\(?\d{3}\)?[-\s.]?\d{3}[-\s.]\d{4}/x"
Run Code Online (Sandbox Code Playgroud)

...匹配美国电话号码.但是,它对我正在测试的字符串是空的有效.如果字符串中包含任何值,则它必须与表达式匹配.

我有其他模式符合美国邮政编码等需要相同条件的模式.

在同一个表达式中实现此目的的最佳方法是什么?

澄清:我在Microsoft的验证应用程序块中使用了RegexValidator.使用它的一个例子如下:

[StringLengthValidator(0, 100, MessageTemplate = "Email must be between {3} and {5}")]
[RegexValidator(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", MessageTemplate = "Valid Email Required.")]
public string EmailAddress
{
    get { return _EmailAddress; } 
    set { SetValue<string>(ref _EmailAddress, value); }
}
Run Code Online (Sandbox Code Playgroud)

这就是为什么我需要解决方案在一个表达式中.

regex

13
推荐指数
1
解决办法
2万
查看次数

WPF如何让UserControl继承Button?

我创建了一个UserControl,它由一对椭圆和标签组成.我把它添加到另一种形式就好了,看起来很漂亮.

然后我开始添加一些事件处理程序,发现我所做的控件没有公开Click事件.哎呀.容易修复,对吧?回到我制作的UserControl上的代码隐藏,让它继承Button.

不幸的是,这样做会导致"MyControl的部分声明不能指定不同的基类"消息.这是一个惊喜,因为我没有声明任何其他基类.搜索有问题的部分也没有返回任何结果.

有没有办法打败这个问题?如果没有,这里最简单的解决方法是什么?我的目标只是在UserControl上获取Click事件.

wpf user-controls button

12
推荐指数
1
解决办法
9565
查看次数

如何在两个控制器操作之间避免AmbiguousMatchException?

我有两个具有相同名称但具有不同方法签名的控制器操作.它们看起来像这样:

    //
    // GET: /Stationery/5?asHtml=true
    [AcceptVerbs(HttpVerbs.Get)]
    public ContentResult Show(int id, bool asHtml)
    {
        if (!asHtml)
            RedirectToAction("Show", id);

        var result = Stationery.Load(id);
        return Content(result.GetHtml());
    }

    //
    // GET: /Stationery/5
    [AcceptVerbs(HttpVerbs.Get)]
    public XmlResult Show(int id)
    {
        var result = Stationery.Load(id);
        return new XmlResult(result);
    }
Run Code Online (Sandbox Code Playgroud)

我的单元测试没有调用一个或另一个控制器动作的问题,但是我的测试html页面抛出了System.Reflection.AmbiguousMatchException.

<a href="/Stationery/1?asHtml=true">Show the stationery Html</a>
<a href="/Stationery/1">Show the stationery</a>
Run Code Online (Sandbox Code Playgroud)

需要改变什么来使这项工作?

.net c# asp.net-mvc controller

12
推荐指数
2
解决办法
1万
查看次数

如何在SQL Server 2000中生成一个填充日期的临时表?

我需要创建一个包含日期范围的临时表,以及一些包含占位符值(0)以供将来使用的列.我需要的日期是$ startDate和$ endDate之间每个月的第一天,这些变量可能相隔数年.

我原来的sql语句看起来像这样:

select dbo.FirstOfMonth(InsertDate) as Month, 0 as Trials, 0 as Sales
into #dates
from customer
group by dbo.FirstOfMonth(InsertDate)
Run Code Online (Sandbox Code Playgroud)

"FirstOfMonth"是一个用户定义的函数,它完全按照它所说的做,返回当月的第一天所提供的日期,时间恰好是午夜.

这几乎完全是我所需要的,直到我发现我的日期偶尔会出现间隙,我有几个月没有记录插入日期.由于我的结果仍然缺少几个月,我需要一个不同的方法.

我已经向存储过程添加了以下声明,预计它们需要我需要的日期范围...

declare $startDate set $startDate = select min(InsertDate) from customer
declare $endDate set $endDate = select max(InsertDate) from customer
Run Code Online (Sandbox Code Playgroud)

......但我不知道该怎么做.

我知道这个问题这个问题类似,但是坦率地说,这个答案已经过去了(我不经常使用SQL,当我这样做时,它往往是在旧版本的SQL Server上)并且有一些小问题差点让我失望.

sql t-sql stored-procedures sql-server-2000

11
推荐指数
3
解决办法
7万
查看次数

使用属性覆盖属性

我正试图找到一种方法来改变属性的序列化行为.

可以说我有这样的情况:

[Serializable]
public class Record
{
   public DateTime LastUpdated {get; set; }

   // other useful properties ...
}

public class EmployeeRecord : Record
{
   public string EmployeeName {get; set; }

   // other useful properties ...
}
Run Code Online (Sandbox Code Playgroud)

现在我想序列化EmployeeRecord.我不希望序列化Record类中的LastUpdated属性.(我确实希望在序列化Record时序列化LastUpdated).

首先,我尝试使用new关键字隐藏LastUpdated属性,然后添加XmlIgnore属性:

public class EmployeeRecord : Record
{
   public string EmployeeName {get; set; }

   [XmlIgnore]
   public new DateTime LastUpdated {get; set; }
   // other useful properties ...
}
Run Code Online (Sandbox Code Playgroud)

但那没用.然后我尝试将基础LastUpdated虚拟化并覆盖它,保留属性:

[Serializable]
public class Record
{
   public virtual DateTime LastUpdated {get; set; } …
Run Code Online (Sandbox Code Playgroud)

.net c# serialization attributes properties

10
推荐指数
2
解决办法
9980
查看次数

有没有办法从继承的属性中删除属性?

是否可以从继承的属性中删除属性?我认为通过使用关键字,我可以这样做......

 public class Person
 {
     [Required]
     public string FirstName { get; set; }

     [Required]
     public string LastName { get; set; }
 }

 public class Employee : Person
 {
     [Required]
     public string JobTitle { get; set; }

     public new string FirstName { get; set; }
 }
Run Code Online (Sandbox Code Playgroud)

......但这根本不起作用.这让我感到惊讶,因为的特别是隐藏继承的成员.

c# data-annotations

10
推荐指数
1
解决办法
2201
查看次数

使用Code First EF4.1进行保存时,如何向属性添加默认值?

我开始创建这样的模型:

public abstract class EditableBase
{
    public DateTime CreatedOn { get; set; }
    public DateTime ModifiedOn { get; set; }

    public int CreatedBy { get; set; }
    public int ModifiedBy { get; set; }
}

public class Project : EditableBase
{
    public int ProjectId { get; set; }
    public string ProjectName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我在应用程序启动时使用此行:

Database.SetInitializer<ModelContext>(
            new DropCreateDatabaseIfModelChanges<ModelContext>());
Run Code Online (Sandbox Code Playgroud)

创建一个名为Projects的表,其中包含上面提到的所有属性...这正是我想要的.

但是,现在我需要在DbContext上发出SaveChanges()时填充一些默认值.当我保存时,我需要使用适当的值更新ModifiedOn和ModifiedBy属性.

通常我至少会在数据库端(触发器或存储过程)执行DateTime值,但这显然不是一个选项,因为数据库将在类更改时随时删除.因为我先做了代码,所以我没有一个可以调整属性的模型设计器.

我想要做的是在EditableBase类中添加一个方法,该方法在执行SaveChanges()时被调用,从而将所有逻辑都保存在一个地方.是否有可能做到这一点?实现目标的最佳方法是什么?

c# entity-framework entity-framework-4.1

10
推荐指数
1
解决办法
2048
查看次数

如何构建具有多个GroupBys的LINQ?

我有一个看起来像这样的实体:

public partial class MemberTank
{
    public int Id { get; set; }
    public int AccountId { get; set; }
    public int Tier { get; set; }
    public string Class { get; set; }
    public string TankName { get; set; }
    public int Battles { get; set; }
    public int Victories { get; set; }
    public System.DateTime LastUpdated { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

一小部分数据样本:

 Id   AccountId   Tier   Class  TankName   Battles  Victories
 ---  ---------   ----   -----  ---------  -------  ----------
 1    432423 …
Run Code Online (Sandbox Code Playgroud)

c# linq entity-framework

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

LINQ Where子句与包含列表具有复杂对象的位置

我已经看到很多LINQ的例子,其中包含一个简单的对象列表:

var intList= new List<int>() { 1, 2, 3 };
var result = db.TableRecords.Where(c => intList.Contains(c.RecordId)).ToList();
Run Code Online (Sandbox Code Playgroud)

我想要做的似乎稍微复杂一点(我认为).我有一行类似于这个的代码获取我需要的列表:

var xzList = db.Relations.Where(r => someOtherList.Contains(r.zId))
                         .Select(r => new { AId = r.xId, BId = r.zId })
                         .ToList();
Run Code Online (Sandbox Code Playgroud)

现在我想得到与上一个示例类似的结果,但现在列表中有一个匿名类型,有两个整数.因此,如何将我现在得到result其中RecordIdTableRecords等于AId在匿名类型中的每个匿名类型xzList

c# linq

9
推荐指数
1
解决办法
3万
查看次数

什么是MVC同时发送文件和重定向到新页面的方式?

我有一个用户必须填写并提交的表格.控制器操作执行一些操作并确定用户可以拥有一个文件,因此重定向到另一个操作,即FilePathResult.

    [CaptchaValidator]
    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Index(FormCollection collection)
    {
        // do some stuff ...
        return RedirectToAction("Download");
    }


    [AcceptVerbs(HttpVerbs.Get)]
    public FilePathResult Download()
    {
        var fileName = "c:\foo.exe";
        return File(fileName, "application/octet-stream", "installer.exe");
    }
Run Code Online (Sandbox Code Playgroud)

我想要做的是将用户重定向到另一个页面,感谢用户下载文件,但我不知道如何以"类似MVC"的方式实现这一点.

我能想到的唯一方法是跳过下载操作,而是重定向到ThankYou操作,并让ThankYou视图使用javascript发送文件.但这对我来说似乎不是MVC.有更好的方法吗?

结果:

接受的答案是正确的,但我想表明我实现了它.

Index操作会在重定向到的位置发生更改:

        return RedirectToAction("Thankyou");
Run Code Online (Sandbox Code Playgroud)

我添加了此控制器(和视图)以向用户显示任何"发布下载信息"并感谢您下载该文件.我从链接文本中抓取的AutoRefresh属性显示了一些其他优秀用途.

    [AutoRefresh(ControllerName="Download", ActionName="GetFile", DurationInSeconds=3)]
    [AcceptVerbs(HttpVerbs.Get)]
    public ActionResult Thankyou()
    {
        return View();
    }
Run Code Online (Sandbox Code Playgroud)

重定向到的动作与以前一样:

    [AcceptVerbs(HttpVerbs.Get)]
    public FilePathResult GetFile()
    {
        var fileName = "c:\foo.exe";
        return File(fileName, "application/octet-stream", "installer.exe");
    }
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc controller

8
推荐指数
1
解决办法
3748
查看次数