2011-10-28 2 views
0

양식을 사용하여 정보를 게시하고 있으며 모델에 유효성 검사가 내장되어 있습니다. 나는 다음 중 하나를 사용하여 필드를 확인할 수 있다는 사실을 알고 :MVC3 모델 유효성 확인을위한 True 또는 False 출력을 얻는 방법

@Html.ValidationSummary() //To validate all fields 

@Html.ValidationMessageFor(x => x.FirstName) //To validate single field 

두 방법 모두 단지 (의 ValidationSummary 용) HTML 목록 또는 범위 (ValidateionMessageFor)을 반환합니다.

입력란이 포함 된 상자에 사용자 정의 스타일을 적용 할 수 있도록 입력란이 유효하거나 또는 유효하지 않은 경우 (또는 null 인 경우 아무 것도없는 경우) 진실 또는 거짓 진술을하고 싶습니다. 그것을위한 레이블. 여기 @Html.IsValid(x => x.FirstName)

내 모델 및보기처럼,이 할 것 같은 코드가있을 경우

는 아는 사람 있나요. 모델이 완전히 당겨져 유효성 검사가 제대로되었는지, HTML 문자열 대신 부울 값을 가져올 수 있는지 여부 만 질문입니다.

모델 :

using System.ComponentModel.DataAnnotations; 

namespace X.Web.Helpers 
{ 
    public class RequestSamplesModel 
    { 
     [Required] 
     public string FirstName { get; set; } 
     [Required] 
     public string LastName { get; set; } 

     public string Email { get; set; } 
     [Required] 
     public string Line1 { get; set; } 
     [Required] 
     public string Line2 { get; set; } 
     [Required] 
     public string City { get; set; } 
     [Required] 
     public string Postcode { get; set; } 
     [Required] 
     public string Country { get; set; } 
    } 
} 

보기 :

@{ 
    Layout = "~/Views/Shared/_PlainLayout.cshtml"; 
} 
@using X.Web.Helpers 
@model RequestSamplesModel 

<form action="/Site/RequestSamples" method="POST"> 
    <div class="form-item"> 
     <span>First Name:</span>@Html.TextBoxFor(x => x.FirstName)</div> 
    <div class="form-item"> 
     <span>Last Name:</span>@Html.TextBoxFor(x => x.LastName)</div> 
    <div class="form-item"> 
     <span>Email:</span>@Html.TextBoxFor(x => x.Email)</div> 
    <div class="form-item"> 
     <span>Address 1:</span>@Html.TextBoxFor(x => x.Line1)</div> 
    <div class="form-item"> 
     <span>Address 2:</span>@Html.TextBoxFor(x => x.Line2)</div> 
    <div class="form-item"> 
     <span>City:</span>@Html.TextBoxFor(x => x.City)</div> 
    <div class="form-item"> 
     <span>Postcode:</span>@Html.TextBoxFor(x => x.Postcode)</div> 
    <div class="form-item"> 
     <span>Country:</span>@Html.TextBoxFor(x => x.Country)</div> 
    <div class="form-item"> 
     <input class="submit-button" type="image" src="/_content/images/email-submit.gif" /></div> 
</form> 

답변

3
@ Html.IsValid처럼,이 할 것 같은 코드가있을 경우

사람이 알고 있나요 (X => x.FirstName)

아니요, 그런 코드가 내장되어 있지 않습니다. 그러나 지금이 있도록 하나를 작성하는 사소한 것 : 귀하의 의견에

이제
public static class HtmlExtensions 
{ 
    public static bool IsValid<TModel, TProperty>(
     this HtmlHelper<TModel> htmlHelper, 
     Expression<Func<TModel, TProperty>> expression 
    ) 
    { 
     var modelState = htmlHelper.ViewData.ModelState; 
     var name = ExpressionHelper.GetExpressionText(expression); 
     var key = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(name); 
     ModelState value; 
     return !modelState.TryGetValue(key, out value) || 
       value.Errors.Count == 0; 
    } 
} 

단순히 범위로 확장 메서드를 가져오고 :

끝내
@if (Html.IsValid(x => x.FirstName)) 
{ 
    @:<div>Super, the first name is valid</div> 
} 
+0

, 덕분에 잔뜩. 이걸 꽤 쓸거야. 부끄러운 거기에 이미 그런 종류의 기능이 내장되어 있지 않습니다 :/ – JakeJ

+0

@ JakeJ, 내장 된 볼 수있는 몇 가지 기능이있는 이유를 이해하려면 다음 블로그 게시물을 읽으십시오 : http : // blogs.msdn.com/b/ericlippert/archive/2003/10/28/53298.aspx –

+0

감사합니다. 실제로는 매우 흥미로운 기사입니다. 이것은 일회 사용되는 것보다 조금 더 많지만, 내가 항상 궁금해하고 사용하기를 원했지만 대신 양식으로 작업 할 때 대안을 만들 필요가 있습니다. 그러나 어느 쪽이든,이 스 니펫은 앞으로 나에게 많은 시간을 절약 할 것입니다. 다시 감사드립니다. – JakeJ

관련 문제