C# ASP.NET MVC 3中模型的一个属性的默认值
我有一个简单的合同模型:C# ASP.NET MVC 3中模型的一个属性的默认值,c#,asp.net-mvc-3,html-helper,C#,Asp.net Mvc 3,Html Helper,我有一个简单的合同模型: public class Contract { public int Number { get; set; } public DateTime DateSigned { get; set; } } 创建新合同时,我希望自动建议下一个可用号码。我在控制器的创建操作中从数据库中获取它 public Create() { ViewBag.SuggestNum = /* ... */; return View(); } 在我看来,我有一个编辑
public class Contract
{
public int Number { get; set; }
public DateTime DateSigned { get; set; }
}
创建新合同时,我希望自动建议下一个可用号码。我在控制器的创建操作中从数据库中获取它
public Create()
{
ViewBag.SuggestNum = /* ... */;
return View();
}
在我看来,我有一个编辑我的号码和我的签名日期:
@Html.EditorFor( m => m.DateSigned )
@Html.EditorFor( m => m.Number )
我尝试了这两种方法,但它们似乎对生成的html没有任何影响:
@Html.EditorFor( m => m.Number, new { @value = ViewBag.SuggestNum.ToString() } )
@Html.EditorFor( m => m.Number, new { @Value = ViewBag.SuggestNum.ToString() } )
另一个选项是在我的控制器中构造合同对象,但我的不可为null的DateTime属性的编辑器默认为01.01.0001,而不是空的:
public Create()
{
var SuggestNum = /* ... */;
// The new object has a DateSigned property with the default value of 01.01.0001
return View( new Contract() { Number = SuggestNum });
}
所以这也不起作用
您知道如何设置my Number属性的编辑器而不是my DateSigned属性的值吗?您可以将
DateSigned
属性设置为可为空的:
然后在控制器中:
public ActionResult Create()
{
var suggestNum = ... fetch from db
return View( new Contract() { Number = suggestNum });
}
在你看来:
@Html.EditorFor( m => m.DateSigned )
@Html.EditorFor( m => m.Number )
您可以将DateSigned
属性设置为可为空的
然后在控制器中:
public ActionResult Create()
{
var suggestNum = ... fetch from db
return View( new Contract() { Number = suggestNum });
}
在你看来:
@Html.EditorFor( m => m.DateSigned )
@Html.EditorFor( m => m.Number )
但是域模型不允许没有签署日期的合同。DateSigned是严格要求的。@Alex,您永远不会将域模型传递给视图。您应该始终使用视图模型,这些模型是专门为满足视图要求而设计的类。您还可以使用[Required]
属性对其进行修饰,以验证用户是否输入了某些值。我已经更新了答案,以便在视图模型中包含此属性。您会注意到,我非常坚持使用单词查看模型
。我故意不使用单词model
。好吧,这不是我所希望的答案,因为我希望尽可能避免业务逻辑和视图之间的额外层。所以我接受你的回答,但我仍然对解决这个问题的其他方法非常感兴趣,这些方法不需要使用不同的视图模型。但是域模型不允许没有签署日期的合同。DateSigned是严格要求的。@Alex,您永远不会将域模型传递给视图。您应该始终使用视图模型,这些模型是专门为满足视图要求而设计的类。您还可以使用[Required]
属性对其进行修饰,以验证用户是否输入了某些值。我已经更新了答案,以便在视图模型中包含此属性。您会注意到,我非常坚持使用单词查看模型
。我故意不使用单词model
。好吧,这不是我所希望的答案,因为我希望尽可能避免业务逻辑和视图之间的额外层。所以我接受你的答案,但我仍然对解决这个问题的其他方法非常感兴趣,这些方法不需要使用不同的视图模型。