Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有ASP.NET MVC的MVVM,部分类作为ViewModel未按预期执行_C#_Asp.net Mvc_Asp.net Mvc 4_Mvvm - Fatal编程技术网

C# 具有ASP.NET MVC的MVVM,部分类作为ViewModel未按预期执行

C# 具有ASP.NET MVC的MVVM,部分类作为ViewModel未按预期执行,c#,asp.net-mvc,asp.net-mvc-4,mvvm,C#,Asp.net Mvc,Asp.net Mvc 4,Mvvm,我使用的是实体框架,因此我不想在EF模型中使用Razor验证语法。出于这个原因,我创建了一个viewmodel来为我进行验证,但很明显,我需要一个在不同状态下支持对象的视图模型。在工作正常的地方,它现在只验证部分字段 两个部分类如下所示 @model EH.BCRT.AdvisoryRequests.Model.BCRTAdvisoryRequest <link href="@Url.Content("/Content/Site.css")" rel="stylesheet" />

我使用的是实体框架,因此我不想在EF模型中使用Razor验证语法。出于这个原因,我创建了一个viewmodel来为我进行验证,但很明显,我需要一个在不同状态下支持对象的视图模型。在工作正常的地方,它现在只验证部分字段

两个部分类如下所示

@model EH.BCRT.AdvisoryRequests.Model.BCRTAdvisoryRequest

<link href="@Url.Content("/Content/Site.css")" rel="stylesheet" />
<link href="@Url.Content("/Content/themes/base/jquery.ui.dialog.css")" rel="stylesheet" />
<link href="@Url.Content("/Content/themes/base/jquery.ui.datepicker.css")" rel="stylesheet" />

<form id="advisoryRequestForm">
    @using (Html.BeginForm())
    {
        @Html.AntiForgeryToken()
        @Html.ValidationSummary(true)

        <fieldset>
            <legend>BCRTAdvisoryRequest</legend>
            <div class="container">
                <div class="h-double">
                    <div class="editor-label">
                        @Html.LabelFor(m => m.RequestTypeID)
                    </div>
                    <div class="editor-field">
                        @Html.ValidationMessageFor(model => model.RequestTypeID)<br />
                        @Html.DropDownListFor(m => m.RequestTypeID, (IEnumerable<SelectListItem>)ViewBag.RequestTypeID, "", null)
                    </div>

                    <div class="editor-label">
                        @Html.LabelFor(m => m.DateRequested)
                    </div>
                    <div class="editor-field">
                        @Html.ValidationMessageFor(model => model.DateRequested)<br />
                        @Html.TextBoxFor(model => model.DateRequested, new { @class = "datepickerfield", id = ViewBag.datepickeruid })
                    </div>

                    <div class="editor-label">
                        @Html.LabelFor(model => model.SiteName)
                    </div>
                    <div class="editor-field">
                        @Html.ValidationMessageFor(model => model.SiteName)<br />
                        @Html.EditorFor(model => model.SiteName)
                    </div>

                    <div class="editor-label">
                        @Html.LabelFor(model => model.ServiceCategoryID)
                    </div>
                    <div class="editor-field">
                        @Html.ValidationMessageFor(model => model.ServiceCategoryID)<br />
                        @Html.DropDownListFor(m => m.ServiceCategoryID, (IEnumerable<SelectListItem>)ViewBag.ServiceCategoryID, "", null)
                    </div>

                    <div class="editor-label">
                        @Html.LabelFor(model => model.Description)
                    </div>
                    <div class="editor-field">
                        @Html.ValidationMessageFor(model => model.Description)<br />
                        @Html.TextAreaFor(model => model.Description, new { style = "width:95%;min-height:80px;" })
                    </div>
                </div>
                <div class="h-double">
                    <div class="editor-label">
                        @Html.LabelFor(model => model.RequestedBy)
                    </div>
                    <div class="editor-field">
                        @Html.ValidationMessageFor(model => model.RequestedBy)<br />
                        @Html.EditorFor(model => model.RequestedBy)
                    </div>

                    <div class="editor-label">
                        @Html.LabelFor(model => model.JobTitle)
                    </div>
                    <div class="editor-field">
                        @Html.ValidationMessageFor(model => model.JobTitle)<br />
                        @Html.EditorFor(model => model.JobTitle)
                    </div>

                    <div class="editor-label">
                        @Html.LabelFor(model => model.LocalOfficeOrTeam)
                    </div>
                    <div class="editor-field">
                        @Html.ValidationMessageFor(model => model.LocalOfficeOrTeam)<br />
                        @Html.EditorFor(model => model.LocalOfficeOrTeam)
                    </div>

                    <div class="editor-label">
                        @Html.LabelFor(model => model.SiteVisit)
                    </div>
                    <div class="editor-field">
                        @Html.ValidationMessageFor(model => model.SiteVisit)<br />
                        @Html.EditorFor(model => model.SiteVisit)
                    </div>

                    <div class="editor-label">
                        @Html.LabelFor(model => model.StatusID)
                    </div>
                    <div class="editor-field">
                        @Html.ValidationMessageFor(model => model.StatusID)<br />
                        @Html.DropDownListFor(m => m.StatusID, (IEnumerable<SelectListItem>)ViewBag.StatusID, "", null)
                    </div>

                    <div class="editor-label">
                        @Html.LabelFor(model => model.ConsultantRetained)
                    </div>
                    <div class="editor-field">
                        @Html.ValidationMessageFor(model => model.ConsultantRetained)<br />
                        @Html.EditorFor(model => model.ConsultantRetained)
                    </div>
                </div>
                <div class="h-single">
                    <div class="editor-label">
                        @Html.LabelFor(model => model.Comments)
                    </div>
                    <div class="editor-field">
                        @Html.ValidationMessageFor(model => model.Comments)<br />
                        @Html.TextAreaFor(model => model.Comments, new { style = "width:95%;min-height:80px;" })
                    </div>
                </div>
            </div>
        </fieldset>
    }
</form>
<script type="text/javascript">
    $(document).ready(function () {
        $('.datepickerfield').each(function () {
            $(this).datepicker({ dateFormat: 'dd-mm-yy' });
        });
    });
</script>
实体框架生成的模型:

public partial class BCRTAdvisoryRequest
{
    public int RequestID { get; set; }
    [DataType(DataType.Date)]
    public Nullable<System.DateTime> DateCreated { get; set; }
    public int TeamMemberID { get; set; }
    public int RequestTypeID { get; set; }
    [DataType(DataType.Date)]
    public System.DateTime DateRequested { get; set; }
    public string SiteName { get; set; }
    public int ServiceCategoryID { get; set; }
    public string Description { get; set; }
    public string RequestedBy { get; set; }
    public string JobTitle { get; set; }
    public string LocalOfficeOrTeam { get; set; }
    public Nullable<bool> SiteVisit { get; set; }
    public int StatusID { get; set; }
    public Nullable<bool> ConsultantRetained { get; set; }
    public string Comments { get; set; }
    public int LastModifiedByID { get; set; }
    public System.DateTime LastModifiedDate { get; set; }

    public virtual User User { get; set; }
    public virtual BCRTAdvisoryRequestServiceCategory BCRTAdvisoryRequestServiceCategory { get; set; }
    public virtual BCRTAdvisoryRequestStatus BCRTAdvisoryRequestStatus { get; set; }
    public virtual BCRTAdvisoryRequestType BCRTAdvisoryRequestType { get; set; }
    public virtual User User1 { get; set; }
}
公共部分类BCRTAdvisoryRequest
{
public int RequestID{get;set;}
[数据类型(DataType.Date)]
公共可为空的DateCreated{get;set;}
public int TeamMemberID{get;set;}
public int RequestTypeID{get;set;}
[数据类型(DataType.Date)]
public System.DateTime DateRequested{get;set;}
公共字符串SiteName{get;set;}
公共int-ServiceCategoryID{get;set;}
公共字符串说明{get;set;}
{get;set;}请求的公共字符串
公共字符串JobTitle{get;set;}
公共字符串localofficeortam{get;set;}
可为空的公共站点访问{get;set;}
public int StatusID{get;set;}
公共可为空的ConsultantRetained{get;set;}
公共字符串注释{get;set;}
public int LastModifiedByID{get;set;}
public System.DateTime LastModifiedDate{get;set;}
公共虚拟用户用户{get;set;}
公共虚拟BCRTAdvisoryRequestServiceCategory BCRTAdvisoryRequestServiceCategory{get;set;}
公共虚拟BCRTAdvisoryRequestStatus BCRTAdvisoryRequestStatus{get;set;}
公共虚拟BCRTAdvisoryRequestType BCRTAdvisoryRequestType{get;set;}
公共虚拟用户User1{get;set;}
}
以及验证模型:

public partial class BCRTAdvisoryRequest
{
    [MetadataType(typeof(BCRTAdvisoryRequest.MetaData))]
    public sealed class MetaData
    {
        [Display(Name = "Date Created")]
        [DisplayFormat(DataFormatString = "{0:dd MMM yyyy}")]
        public System.DateTime DateCreated { get; set; }

        [Required]
        [Display(Name = "Request Type")]
        public int RequestTypeID { get; set; }

        [Required]
        [Display(Name = "Date Requested")]
        [DisplayFormat(DataFormatString = "{0:dd MMM yyyy}")]
        public System.DateTime DateRequested { get; set; }

        [Required]
        [Display(Name = "Site Name")]
        public string SiteName { get; set; }

        [Required]
        [Display(Name = "Service Category")]
        public int ServiceCategoryID { get; set; }

        [Required]
        [Display(Name = "Description")]
        public string Description { get; set; }

        [Required]
        [Display(Name = "Requested by")]
        public string RequestedBy { get; set; }

        [Required]
        [Display(Name = "Job Title")]
        public string JobTitle { get; set; }

        [Display(Name = "Local Office/Team")]
        public string LocalOfficeOrTeam { get; set; }

        [Display(Name = "Site Visit")]
        public Nullable<bool> SiteVisit { get; set; }

        [Required]
        [Display(Name = "Status")]
        public int StatusID { get; set; }

        [Display(Name = "Consultant Retained")]
        public Nullable<bool> ConsultantRetained { get; set; }

        [Display(Name = "Comments")]
        public string Comments { get; set; }
    }
}
公共部分类BCRTAdvisoryRequest
{
[元数据类型(typeof(BCRTAdvisoryRequest.MetaData))]
公共密封类元数据
{
[显示(Name=“创建日期”)]
[DisplayFormat(DataFormatString=“{0:dd-MMM-yyyy}”)]
public System.DateTime DateCreated{get;set;}
[必需]
[显示(Name=“请求类型”)]
public int RequestTypeID{get;set;}
[必需]
[显示(Name=“请求的日期”)]
[DisplayFormat(DataFormatString=“{0:dd-MMM-yyyy}”)]
public System.DateTime DateRequested{get;set;}
[必需]
[显示(名称=“站点名称”)]
公共字符串SiteName{get;set;}
[必需]
[显示(Name=“服务类别”)]
公共int-ServiceCategoryID{get;set;}
[必需]
[显示(Name=“Description”)]
公共字符串说明{get;set;}
[必需]
[显示(Name=“请求方”)]
{get;set;}请求的公共字符串
[必需]
[显示(Name=“职务”)]
公共字符串JobTitle{get;set;}
[显示(Name=“本地办事处/团队”)]
公共字符串localofficeortam{get;set;}
[显示(Name=“现场访问”)]
可为空的公共站点访问{get;set;}
[必需]
[显示(Name=“Status”)]
public int StatusID{get;set;}
[显示(名称=“保留顾问”)]
公共可为空的ConsultantRetained{get;set;}
[显示(Name=“注释”)]
公共字符串注释{get;set;}
}
}
至于行为,我希望这对于使用BCRTAdvisoryRequest类作为模型的局部视图来说是足够的信息,可以正确地进行验证,但显然不是

情况就是这样:

该对话框的问题是,一半的必填字段未经验证,所有标签均无效

局部视图编码如下:

@model EH.BCRT.AdvisoryRequests.Model.BCRTAdvisoryRequest

<link href="@Url.Content("/Content/Site.css")" rel="stylesheet" />
<link href="@Url.Content("/Content/themes/base/jquery.ui.dialog.css")" rel="stylesheet" />
<link href="@Url.Content("/Content/themes/base/jquery.ui.datepicker.css")" rel="stylesheet" />

<form id="advisoryRequestForm">
    @using (Html.BeginForm())
    {
        @Html.AntiForgeryToken()
        @Html.ValidationSummary(true)

        <fieldset>
            <legend>BCRTAdvisoryRequest</legend>
            <div class="container">
                <div class="h-double">
                    <div class="editor-label">
                        @Html.LabelFor(m => m.RequestTypeID)
                    </div>
                    <div class="editor-field">
                        @Html.ValidationMessageFor(model => model.RequestTypeID)<br />
                        @Html.DropDownListFor(m => m.RequestTypeID, (IEnumerable<SelectListItem>)ViewBag.RequestTypeID, "", null)
                    </div>

                    <div class="editor-label">
                        @Html.LabelFor(m => m.DateRequested)
                    </div>
                    <div class="editor-field">
                        @Html.ValidationMessageFor(model => model.DateRequested)<br />
                        @Html.TextBoxFor(model => model.DateRequested, new { @class = "datepickerfield", id = ViewBag.datepickeruid })
                    </div>

                    <div class="editor-label">
                        @Html.LabelFor(model => model.SiteName)
                    </div>
                    <div class="editor-field">
                        @Html.ValidationMessageFor(model => model.SiteName)<br />
                        @Html.EditorFor(model => model.SiteName)
                    </div>

                    <div class="editor-label">
                        @Html.LabelFor(model => model.ServiceCategoryID)
                    </div>
                    <div class="editor-field">
                        @Html.ValidationMessageFor(model => model.ServiceCategoryID)<br />
                        @Html.DropDownListFor(m => m.ServiceCategoryID, (IEnumerable<SelectListItem>)ViewBag.ServiceCategoryID, "", null)
                    </div>

                    <div class="editor-label">
                        @Html.LabelFor(model => model.Description)
                    </div>
                    <div class="editor-field">
                        @Html.ValidationMessageFor(model => model.Description)<br />
                        @Html.TextAreaFor(model => model.Description, new { style = "width:95%;min-height:80px;" })
                    </div>
                </div>
                <div class="h-double">
                    <div class="editor-label">
                        @Html.LabelFor(model => model.RequestedBy)
                    </div>
                    <div class="editor-field">
                        @Html.ValidationMessageFor(model => model.RequestedBy)<br />
                        @Html.EditorFor(model => model.RequestedBy)
                    </div>

                    <div class="editor-label">
                        @Html.LabelFor(model => model.JobTitle)
                    </div>
                    <div class="editor-field">
                        @Html.ValidationMessageFor(model => model.JobTitle)<br />
                        @Html.EditorFor(model => model.JobTitle)
                    </div>

                    <div class="editor-label">
                        @Html.LabelFor(model => model.LocalOfficeOrTeam)
                    </div>
                    <div class="editor-field">
                        @Html.ValidationMessageFor(model => model.LocalOfficeOrTeam)<br />
                        @Html.EditorFor(model => model.LocalOfficeOrTeam)
                    </div>

                    <div class="editor-label">
                        @Html.LabelFor(model => model.SiteVisit)
                    </div>
                    <div class="editor-field">
                        @Html.ValidationMessageFor(model => model.SiteVisit)<br />
                        @Html.EditorFor(model => model.SiteVisit)
                    </div>

                    <div class="editor-label">
                        @Html.LabelFor(model => model.StatusID)
                    </div>
                    <div class="editor-field">
                        @Html.ValidationMessageFor(model => model.StatusID)<br />
                        @Html.DropDownListFor(m => m.StatusID, (IEnumerable<SelectListItem>)ViewBag.StatusID, "", null)
                    </div>

                    <div class="editor-label">
                        @Html.LabelFor(model => model.ConsultantRetained)
                    </div>
                    <div class="editor-field">
                        @Html.ValidationMessageFor(model => model.ConsultantRetained)<br />
                        @Html.EditorFor(model => model.ConsultantRetained)
                    </div>
                </div>
                <div class="h-single">
                    <div class="editor-label">
                        @Html.LabelFor(model => model.Comments)
                    </div>
                    <div class="editor-field">
                        @Html.ValidationMessageFor(model => model.Comments)<br />
                        @Html.TextAreaFor(model => model.Comments, new { style = "width:95%;min-height:80px;" })
                    </div>
                </div>
            </div>
        </fieldset>
    }
</form>
<script type="text/javascript">
    $(document).ready(function () {
        $('.datepickerfield').each(function () {
            $(this).datepicker({ dateFormat: 'dd-mm-yy' });
        });
    });
</script>
@model EH.BCRT.AdvisoryRequests.model.BCRTAdvisoryRequest
@使用(Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
BCRTAdvisoryRequest
@LabelFor(m=>m.RequestTypeID)
@Html.ValidationMessageFor(model=>model.RequestTypeID)
@DropDownListFor(m=>m.RequestTypeID,(IEnumerable)ViewBag.RequestTypeID,“”,null) @LabelFor(m=>m.DateRequested) @Html.ValidationMessageFor(model=>model.DateRequested)
@TextBoxFor(model=>model.DateRequested,新的{@class=“datepickerfield”,id=ViewBag.datepickeruid}) @LabelFor(model=>model.SiteName) @Html.ValidationMessageFor(model=>model.SiteName)
@EditorFor(model=>model.SiteName) @LabelFor(model=>model.ServiceCategoryID) @Html.ValidationMessageFor(model=>model.ServiceCategoryID)
@Html.DropDownListFor(m=>m.ServiceCategoryID,(IEnumerable)ViewBag.ServiceCategoryID,“,null) @LabelFor(model=>model.Description) @Html.ValidationMessageFor(model=>model.Description)
@text区域(model=>model.Description,新{style=“宽度:95%;最小高度:80px;”) @LabelFor(model=>model.RequestedBy) @Html.Valida
[MetadataType(typeof(BCRTAdvisoryRequest.MetaData))]
public partial class BCRTAdvisoryRequest
{

    public sealed class MetaData
    {