我需要匹配模式的正则表达式或为空.
现在我有一个表达......
"\(?\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)
这就是为什么我需要解决方案在一个表达式中.
我创建了一个UserControl,它由一对椭圆和标签组成.我把它添加到另一种形式就好了,看起来很漂亮.
然后我开始添加一些事件处理程序,发现我所做的控件没有公开Click事件.哎呀.容易修复,对吧?回到我制作的UserControl上的代码隐藏,让它继承Button.
不幸的是,这样做会导致"MyControl的部分声明不能指定不同的基类"消息.这是一个惊喜,因为我没有声明任何其他基类.搜索有问题的部分也没有返回任何结果.
有没有办法打败这个问题?如果没有,这里最简单的解决方法是什么?我的目标只是在UserControl上获取Click事件.
我有两个具有相同名称但具有不同方法签名的控制器操作.它们看起来像这样:
//
// 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)
需要改变什么来使这项工作?
我需要创建一个包含日期范围的临时表,以及一些包含占位符值(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上)并且有一些小问题差点让我失望.
我正试图找到一种方法来改变属性的序列化行为.
可以说我有这样的情况:
[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) 是否可以从继承的属性中删除属性?我认为通过使用新关键字,我可以这样做......
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)
......但这根本不起作用.这让我感到惊讶,因为新的特别是隐藏继承的成员.
我开始创建这样的模型:
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()时被调用,从而将所有逻辑都保存在一个地方.是否有可能做到这一点?实现目标的最佳方法是什么?
我有一个看起来像这样的实体:
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) 我已经看到很多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其中RecordId在TableRecords等于AId在匿名类型中的每个匿名类型xzList?
我有一个用户必须填写并提交的表格.控制器操作执行一些操作并确定用户可以拥有一个文件,因此重定向到另一个操作,即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) c# ×6
.net ×2
asp.net-mvc ×2
controller ×2
linq ×2
attributes ×1
button ×1
properties ×1
regex ×1
sql ×1
t-sql ×1
wpf ×1