2013-07-05 5 views
1

Я все еще довольно новичок в MVC, так что медведь со мной.MVC3, проверяющий частичный вид

У меня есть простой вид, который содержит частичный вид. В этой частичной модели представления у меня есть аннотации проверки так:

public class LocationViewModel 
{ 
    [Display(Name = "Area")] 
    [UIHint("DropDownList")] 
    public int? AreaId { get; set; } 
    public string Area { get; set; } 
    public IEnumerable<AWS.DTO.Lookup> Areas { get; set; } 

    [Display(Name = "Establishment")] 
    [UIHint("DropDownList")] 
    public int? EstablishmentId { get; set; } 
    public string Establishment { get; set; } 
    public IEnumerable<AWS.DTO.Lookup> Establishments { get; set; } 

    [Display(Name = "Property")] 
    [UIHint("DropDownList")] 
    [Required(ErrorMessage = "Category is required.")] 
    public int PropertyId { get; set; } 
    public string Property { get; set; } 
    public IEnumerable<AWS.DTO.Lookup> Properties { get; set; } 
} 

Частичного вид:

@model AWS.PL.ViewModels.LocationViewModel 

<script type="text/javascript"> 
    function getSEATs(area) { 
     $.ajax({ 
      url: "@Url.Action("SelectSEATs", "Location")", 
      data: { areaId: area }, 
      dataType: "json", 
      type: "POST", 
      error: function() { 
       alert("An error occurred."); 
      }, 
      success: function (data) { 
       var items = ""; 
       $.each(data, function (i, item) { 
        items += "<option value=\"" + item.Value + "\">" + item.Text + "</option>"; 
       }); 

       $("#SEATId").html(items); 
      } 
     }); 
    } 

    function getEstablishments(seat) { 
     $.ajax({ 
      url: "@Url.Action("SelectEstablishments", "Location")", 
      data: { seatId: seat }, 
      dataType: "json", 
      type: "POST", 
      error: function() { 
       alert("An error occurred."); 
      }, 
      success: function (data) { 
       var items = ""; 
       $.each(data, function (i, item) { 
        items += "<option value=\"" + item.Value + "\">" + item.Text + "</option>"; 
       }); 

       $("#EstablishmentId").html(items); 
      } 
     }); 
    } 

    function getProperties(estab) { 
     $.ajax({ 
      url: "@Url.Action("SelectProperties", "Location")", 
      data: { estabId: estab }, 
      dataType: "json", 
      type: "POST", 
      error: function() { 
       alert("An error occurred."); 
      }, 
      success: function (data) { 
       var items = ""; 
       $.each(data, function (i, item) { 
        items += "<option value=\"" + item.Value + "\">" + item.Text + "</option>"; 
       }); 

       $("#PropertyId").html(items); 
      } 
     }); 
    } 

    $(document).ready(function() { 
     $("#AreaId").change(function() { 
      var area = $("#AreaId").val(); 
      getSEATs(area); 
     }); 
     $("#SEATId").change(function() { 
      var seat = $("#SEATId").val(); 
      getEstablishments(seat); 
     }); 
     $("#EstablishmentId").change(function() { 
      var estab = $("#EstablishmentId").val(); 
      getProperties(estab); 
     }); 
    });  
</script> 
<div class="control-group"> 
    @Html.LabelFor(m => m.AreaId, new { @class = "control-label" }) 
    <div class="controls"> 
     <div> 
      @Html.DropDownListFor(m => m.AreaId, new SelectList(Model.Areas, "ID", "Description", -1), "-- Please Select -- ") 
     </div> 
    </div> 
</div> 
<div class="control-group"> 
    @Html.LabelFor(m => m.SEATId, new { @class = "control-label" }) 
    <div class="controls"> 
     <div> 
      @Html.DropDownListFor(m => m.SEATId, new SelectList(Model.SEATs, "ID", "Description", -1)) 
     </div> 
    </div> 
</div> 
<div class="control-group"> 
    @Html.LabelFor(m => m.EstablishmentId, new { @class = "control-label" }) 
    <div class="controls"> 
     <div> 
      @Html.DropDownListFor(m => m.EstablishmentId, new SelectList(Model.Establishments, "ID", "Description", -1)) 
     </div> 
    </div> 
</div> 
<div class="control-group"> 
    @Html.LabelFor(m => m.PropertyId, new { @class = "control-label" }) 
    <div class="controls"> 
     <div> 
      @Html.DropDownListFor(m => m.PropertyId, new SelectList(Model.Properties, "ID", "Description", -1)) 
      @Html.ValidationMessageFor(m => m.PropertyId) 
     </div> 
    </div> 
</div> 

Когда я представляю свою основную форму проверки достоверности запускаемую для полея на главном экране, а не частичный Посмотреть. Может ли кто-нибудь сказать мне, почему?

Thanks, Paul.

+1

Как выглядит ваш частичный просмотр? Какие свойства модели используются в вашем частичном представлении? –

+0

Я добавил код частичного просмотра. Основная модель использует свойство propertyid. – Wilky

+0

Ahh, так что аннотации проверки должны находиться на основном свойстве, а не на частичном представлении модели? – Wilky

ответ

1

Поскольку поле свойства является непустым значением, поле всегда будет иметь некоторое значение. Обязательный атрибут проверяет только пустые или нулевые поля, а не значения по умолчанию. Вам нужно будет изменить тип свойства на int? И установить значение по умолчанию равным null.