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
。好吧,这不是我所希望的答案,因为我希望尽可能避免业务逻辑和视图之间的额外层。所以我接受你的答案,但我仍然对解决这个问题的其他方法非常感兴趣,这些方法不需要使用不同的视图模型。