這是我在這裏發佈的第一個問題,所以如果缺少任何東西,請原諒我。我會更新所需的任何信息。C#MVC 3驗證在特定視圖上失敗
說明
我的工作我的第一個C#.NET MVC-3的應用程序。我使用實體框架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」表單值。
我跑出來的東西來看待,在他們看的時間。現在,我只是錯誤陷阱壞的日期值在控制器和傳回一個空視圖模型,以保持用戶從看到死亡的黃色屏幕。
我知道驗證是基於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");
});
任何幫助,您可以給我搞清楚了這一點將是巨大的。讓我知道是否還有其他需要的東西。
再次感謝。
附加信息
我想澄清一下,萬一有任何混淆: 我有兩個的ViewModels: 第一個視圖模型(稱爲PackageInfo)包含一個實體框架模型創建的對象的實例。 PackageInfo中的值在視圖中被烘焙的「簡單」MVC驗證正確驗證。
第二個ViewModel(稱爲PackageVals)包含DateTime值。 PackageVals中的值未在視圖中驗證。
什麼是您收到的錯誤? –
另外我注意到你的'DisplayFormat'屬性值爲'{0:dd/MM/yyyy}',而你的驗證表明格式必須是'mm/dd/yyyy'。這是故意的嗎? –
我看到一個錯誤的唯一時間是如果表單值傳入,並且它們不是日期值。例如,如果我在DateIn字段中傳遞「24ashugfdahu9ahgahui」,我得到一個'String未被識別爲有效的DateTime'錯誤。我在Controller中的try-catch塊中捕獲了這個錯誤,所以錯誤永遠不會通過,但是用戶永遠不知道他們爲什麼沒有得到任何響應。 – War2d2