이것은 첫 번째 질문으로 여기에 게시되어 있으므로 누락 된 부분이 있으면 용서해주십시오. 요청한 모든 정보로 업데이트하겠습니다.C# MVC 3 특정보기에 실패한 유효성 검사
내가 처음으로 C#을 닷넷 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'양식 값이 필요합니다.
나는 지금보고있는 것을 다 써 버렸고 시간을 들여다 보았습니다. 지금은 컨트롤러에서 잘못된 날짜 값을 오류 트래핑하고 null ViewModel을 전달하여 사용자가 볼 수 없도록합니다. 죽음의 노란색 화면.
나는 유효성 검사가 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");
});
당신이 좋은 것이 아웃내는 저를 줄 수있는 어떤 도움 : 여기 내 전체 jQuery를 스크립트입니다.니가 필요로하는 것이 있으면 알려줘.
다시 한번 감사드립니다. (PackageInfo라고도 함) 첫 번째 뷰 모델 엔티티 프레임 워크 모델에서 만든 개체의 인스턴스를 포함 : 나는 두 ViewModels이 :
는
정보 추가 나는 어떤 혼란이있을 경우, 명확하게 원했다. PackageInfo의 값은 구운 "간단한"MVC 유효성 검사를 통해 뷰에서 올바르게 확인됩니다.
두 번째 ViewModel (PackageVals)에는 DateTime 값이 들어 있습니다. PackageVals의 값의 유효성이 뷰에서 확인되지 않습니다.
받고있는 오류가 무엇입니까 :
여기에 작동하는 코드는? –
또한'DisplayFormat' 속성의 값이'{0 : dd/MM/yyyy} '임을 확인하는 동안 형식이'mm/dd/yyyy'이어야한다고합니다. 이게 의도적 이었나요? –
오류가 나타나는 유일한 시간은 양식 값이 전달되고 날짜 값이 아닌 경우입니다. 예를 들어 DateIn 필드에 "24ashugfdahu9ahgahui"를 전달하면 'String이 유효한 DateTime으로 인식되지 않습니다.'오류가 발생합니다. 나는 오류를 결코 통과하지 못하도록 컨트롤러의 try-catch 블록을 트래핑하지만, 사용자는 왜 응답을 얻지 못했는지 결코 알지 못합니다. – War2d2