是否可以在不验证"MVC-3"的情况下验证MVC-3模型;子模型"

本文关键字:quot 模型 MVC-3 验证 情况下 是否 | 更新日期: 2023-09-27 18:02:03

我有一个类需要指定另一个类,但我不希望MVC ModelState验证器检查辅助模型是否有效。这可能吗?

这里有一个简单的概述:

我的实体看起来像这样:

public class WidgetType
{
    public long Id { get; private set; }
    [Required]
    public string Name { get; set; }
    ...
}
public class Widget
{
    public long Id { get; private set; }
    [Required]
    public string Name { get; set; }
    [Required]
    public WidgetType WidgetType { get; set; }
    ...
}

我将它们封装在一个WidgetViewModel类中,并将其传递给视图,如下所示:

public class WidgetViewModel
{
    public Widget Widget { get; set; }
    public ICollection<WidgetType> WidgetTypes
    {
        get
        {
            return _repository.GetWidgets();
        }
    }
    ...
}

我的观点是这样的:

...
@Html.DropDownListFor( m => m.Widget.WidgetType.Id, new SelectList( new EquipmentViewModel().EquipmentTypes, "Id", "Name" ) )
...

除验证外,所有这些都有效。由于CCD_ 3是必需的,所以CCD_。我需要用户选择一个WidgetType,但我不希望ModelState的验证深度超过"Widget.WidgetType.Id"(这应该是Widget外键所需的全部内容?(。

有更好的方法吗?我觉得应该有一些方法来验证,而不必递归地深入检查属性,但我找不到。我缺少什么。。。?

是否可以在不验证"MVC-3"的情况下验证MVC-3模型;子模型"

public class WidgetViewModel
{    
    [Required]
    public string Name { get; set; }
    [Required]
    public WidgetType WidgetTypeId { get; set; }
    public SelectList WidgetTypes 
    {
        get
        {
             //This should be popuplated in your controller or factory not in the view model
             retun new SelectList{ _repository.GetWidgets(),"Id","Name");
        }
   }
}

在您看来

 @Html.DropDownListFor( m => m.WidgetTypeId, Model.WidgetTypes)

在你的控制器

public ActionResult Create(WidgetViewModel model)
{
    Widget widget = new Widget{
         Name = model.Name,
         WidgetType = yourManager.GetWidgetTypeByID(model.WigetTypeId);
    };
    yourManager.Create(widget);
    //...
}

如果视图中只需要WidgetID,则不需要在WidgetViewModel中包含整个Widget。只需具有名为WidgetID的属性。视图模型类应该只有视图所需的数据。

在提交表单时调用的控制器操作方法中,如果需要,可以使用WidgetID从数据库中获取Widget对象。

http://blog.stevensanderson.com/2010/02/19/partial-validation-in-aspnet-mvc-2/给出了部分验证的示例