这是我在这里发布的第一个问题,如果有任何遗漏,请原谅我。我会更新任何要求的信息。
解释
我正在开发我的第一个 C#.Net MVC-3 应用程序。我正在使用 Entity Framework 4.0 和 Razor 视图引擎。
对于大多数视图,我使用包含部分类实例的视图模型。该部分类派生自 EF 类,并包含这些类成员的数据注释。这很顺利,现在我所有使用该视图模型的视图都对受影响的文本框进行了验证。例子:
部分类:
[MetadataType(typeof(DataPackageMetaData))]
public partial class DataPackage
{
//empty
}
public class DataPackageMetaData
{
[Required]
[StringLength(50)]
public string DataPackageID { get; set; }
... (a lot more stuff like this) ...
}
视图模型:
public class PackageInfo
{
// Registration Package information
public DataPackage package { get; set; }
public Reviewer reviewer { get; set; }
public PackageTracking trackingSave { get; set; }
<...>
//Constructor
public PackageInfo()
{
package = new DataPackage();
reviewer = new Reviewer();
trackingSave = new PackageTracking();
}
}
所以,所有这些东西的验证都是“有效的”。在视图(实际上是局部视图的一部分)中,我只放了一个“TextBoxFor”。然后如果验证失败,则会以红色发布一条漂亮的错误消息:
看法:
@Html.TextBoxFor(model => Model.package.DataPackageID, new { @class = "short", @id = "DataPackageID" })
@Html.ValidationMessageFor(model => Model.package.DataPackageID, "The Data Package ID is required and cannot be longer than 50 characters")
问题
我现在遇到的问题是我已经转移到程序的报告方面,我想要一个可以传递“DateIn”和“DateOut”表单值(除其他外)的新 ViewModel,以便自定义报告查询可以是生成。我希望能够验证 DateIn 和 DateOut 值确实是日期值。出于某种原因,这不起作用。
视图模型:
public class PackageVals
{
< ... >
// Date value for formatted "Date In" value
[DataType(DataType.Date)]
[DisplayName("Date In")]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
[Required]
public DateTime DateIn { get; set; }
// Date value for formatted "Date Out" value
[DataType(DataType.Date)]
[DisplayName("Date Out")]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
[Required]
public DateTime DateOut { get; set; }
<... more stuff ...>
}
看法
@Html.TextBoxFor(model => Model.DateIn, new { @class = "small", @id = "DateIn"})
@Html.ValidationMessageFor(model => Model.DateIn, "A valid date must be entered in the format mm/dd/yyyy.")
<...>
@Html.TextBoxFor(model => Model.DateOut, new { @class = "small", @id = "DateOut"})
@Html.ValidationMessageFor(model => Model.DateOut, , "A valid date must be entered in the format mm/dd/yyyy.")
请注意,在所有情况下,我都使用部分视图,然后嵌入到其他视图中。应用程序的报告生成部分有几个不同的视图,几乎所有视图都需要“DateIn”和“DateOut”表单值。
我已经没有什么可以看的了,也没有时间看它们了。现在,我只是在 Controller 中错误地捕获错误的日期值并传回一个空 ViewModel 以防止用户看到黄屏死机.
我知道验证是基于 jQuery 的,但我认为我在那里没有做任何可能导致问题的事情。这是我的整个 jQuery 脚本:
jQuery 脚本
$(document).ready(function () {
// Purple box autocomplete Stuff
$("#Product").autocomplete({ source: '/SharedFunctions/AutoFillProduct' });
$("#ActiveIngredient").autocomplete({ source: '/SharedFunctions/AutoFillActiveIngredient' });
$("#Applicant").autocomplete({ source: '/SharedFunctions/AutoFillApplicant' });
// Purple box autocomplete Stuff
$("#DataType").autocomplete({ source: '/SharedFunctions/AutoFillDataType' });
// Purple Box datepicker stuff
$("#DateReceived").datepicker({ dateFormat: "mm/dd/yy" });
$("#OutDate").datepicker({ dateFormat: "mm/dd/yy" });
// Silver box datepicker stuff; Also used by Reports
$("#DateIn").datepicker({ dateFormat: "mm/dd/yy" });
$("#DateOut").datepicker({ dateFormat: "mm/dd/yy" });
// Alternate table row colors
$("table.center > tbody tr:even").css("background-color", "#F2F8FF");
});
你能给我的任何帮助来解决这个问题都会很棒。让我知道您是否还有其他需要。
再次感谢。
附加信息
我想澄清一下,以防有任何混淆:我有两个 ViewModel:第一个 ViewModel(称为 PackageInfo)包含从实体框架模型创建的对象的实例。PackageInfo 中的值正在通过内置的“简单”MVC 验证在视图中正确验证。
第二个 ViewModel(称为 PackageVals)包含 DateTime 值。PackageVals 中的值未在视图中进行验证。