2011-04-25 6 views
1

내 EF 생성 클래스의 추상화를 나타내는 사용자 정의 viewModels를 사용하여 눈에 띄지 않는 유효성 검사를 수행 할 수 없습니다.viewmodels 및 눈에 거슬리지 않은 유효성 검사 mvc3

시도해 볼 수있는 것처럼 시도 할 때 내 도시 엔티티에있는 Name 속성의 양식 제출시 유효성 검사가 실행되지 않습니다. 나는 그것이보기에있는 다른 모델들과 관련이 있다고 믿지만 단순히 그것이 어떻게 작동하는지 충분히 알지 못합니다.

양해 바랍니다. 모든 최신 유효성 검사 스크립트를 가지고 있으며 firebug 및 firequery를 사용하여 페이지를 관찰 할 때 스크립트가 입력에서 유효한 클래스를 추가 및 제거하지만 입력이 유효성 검사 컬렉션의 일부가 아닌 것을 볼 수 있습니다.

미리 감사드립니다.

내 뷰 모델 :

/// <summary> 
/// Represents abstraction of the City View that also serves in 
/// data binding between the City View and the City Model. 
/// </summary> 
public class CityViewModel 
{ 
    /// <summary> 
    /// Gets or sets the city. 
    /// </summary> 
    /// <value></value> 
    public City City { get; set; } 

    /// <summary> 
    /// Gets or sets the collection of states. 
    /// </summary> 
    /// <value></value> 
    public ICollection<State> States { get; set; } 
} 

내 CreateCity보기 :

@model OzFarmGuide.ViewModels.CityViewModel 
@{ 
    ViewBag.Title = "Create a new city"; 
    Layout = "~/Views/Shared/_AdminLayout.cshtml"; 
} 
<h2> 
    Create a new city</h2> 

@using (Html.BeginForm()) 
{ 
    @Html.EditorFor(model => model.City, new { States = Model.States }) 
    <div class="entity-actions"> 
     <input type="submit" value="Create" /> 
     | 
     @Html.ActionLink("Back to List", "Cities") 
    </div> 
} 

내 편집기 템플릿 (_ValidationPartial 그냥 스크립트 참조를 포함)

여기 요청으로
@model OzFarmGuide.Models.City 
@Html.Partial("_ValidationPartial") 
@Html.ValidationSummary(true) 
<div class="editor-label"> 
    @Html.LabelFor(model => model.Name) 
</div> 
<div class="editor-field"> 
    @Html.TextBoxFor(model => model.Name) 
    @Html.ValidationMessageFor(model => model.Name) 
</div> 
<div class="editor-label"> 
    @Html.LabelFor(model => model.State) 
</div> 
<div class="editor-field"> 
    @Html.DropDownList("StateId", 
    new SelectList(ViewBag.States as System.Collections.IEnumerable, 
    "StateId", "Name", 
    Model.StateId)) 
</div> 
@Html.HiddenFor(model => model.CityId) 

는 스크립트입니다 나는 다음을 포함했다 :

<script src="@Url.Content("http://ajax.aspnetcdn.com/ajax/jquery.validate/1.8/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script> 
+0

포함 된 Js 스크립트는 무엇입니까? jquery.unobtrusive-ajax.js가 포함되어 있지 않다는 느낌이 들었습니다. –

+0

@amit_g : 나는 그 스크립트를 포함시키지 않았지만 아약스 게시물에만 필요하다는 것을 알고 있었다. 나는 참고 문헌을 추가했지만 슬프게도 변화가 없다. –

+0

정확히 어떤 스크립트가 포함되어 있는지 게시 할 수 있습니까? 아마도 _AdminLayout.cshtml에있을 것입니다. –

답변

3

모든 참조 유형 및 문자열 유형에 [필수] 데이터 주석을 추가해야합니다. 당신의 수업은 EF가 생성되었다고 언급했듯이. 그 친구 클래스를 사용하십시오. 또 다른 비슷한 질문으로 answer을보십시오.

+0

정말 뛰어난 지원! 그렇게 해줘서 고마워. 정말 쇼를 만드는 버그였습니다. 건배! –

0

1- 문자열 속성의 경우 [필수]를 추가해야합니다.

2 "이름"이 같은 입력 필드가 여러 개 있는지 확인할 수 있습니까? 문제 일 수 있습니다.

0

다음을 설정 했습니까?

<configuration> 
    <appSettings> 
     <add key="ClientValidationEnabled" value="true"/> 
     <add key="UnobtrusiveJavaScriptEnabled" value="true"/> 
    </appSettings> 
</configuration> 

또한 코드 또는 중지 할 수 있습니다 또한

HtmlHelper.ClientValidationEnabled = true; 
HtmlHelper.UnobtrusiveJavaScriptEnabled = true; 

, 당신이 필요한 데이터 주석 중 하나를 추가 한 당신의 재산에?

Brad Wilson On Unobtrusive Validation

관련 문제