2016-11-03 7 views
0

У меня есть следующая модель в моем проекте mvc.@ html.validationmessagefor не показывает сообщение об ошибке

public class AddGISViewModel 
{ 
    public myproject.Models.DomainModels.GIS gis { get; set; } 
    public IEnumerable<myproject.Models.DomainModels.Companies> Companies { get; set; } 
    public long CompanyID { get; set; } 
} 

Я создал представление, как этот

@model myproject.ViewModels.GIS.AddGISViewModel 
@using (Ajax.BeginForm("Create", "GIS", new AjaxOptions { HttpMethod = "Post", Url = "/GIS/Create" })) 
{ 
@Html.AntiForgeryToken() 
<div class="form-horizontal"> 
    @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
    <div class="form-group"> 
     @Html.Label("company", new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.DropDownListFor(model => model.CompanyID, new SelectList(Model.Companies, "CompanyID", "Name"), "select company please ", htmlAttributes: new {@class = "form-control" }) 
      @Html.ValidationMessageFor(model => model.CompanyID) 
     </div> 
    </div> 

также я создал следующие метаданные

[Required(ErrorMessage = "you should select company")] 
    [DisplayName("company")] 
    [Display(Name = "company")] 
    public long CompanyID { get; set; } 

Когда я запускаю свой проект @validationmessagefor шоу «CompanyID поле является обязательным» не «вы должны выбрать компанию», которую я определяю в метаданных. Как я могу исправить эту проблему?

+0

Приложите эти атрибуты к классу 'AddGISViewModel' –

+0

Большое вам спасибо, я применяю эти атрибуты к addGISViewModel, и это сработало. Есть ли какой-то способ вместо этого? –

+0

Почему вы не хотите делать это правильно? (вы создали модель представления, которая должна представлять именно то, что вам нужно в представлении, включая атрибуты отображения и проверки). –

ответ

0

Вы создали модель представления, поэтому примените эти атрибуты к свойству в модели представления. Поскольку целью модели представления является представление того, что вы хотите отображать/редактировать в представлении, нет смысла создавать отдельный класс для метаданных.

Вашего мнение модель должна быть

public class AddGISViewModel 
{ 
    [Required(ErrorMessage = "you should select company")] 
    [DisplayName("company")] 
    public long? CompanyID { get; set; } 
    public IEnumerable<SelectListItem> Companies { get; set; } 
    .... 
} 

Обратите внимания, что CompanyID свойства должно быть обнуляемым для защиты от детей в возрасте до проводки атак, и свойство коллекции для отображения компаний п DropDownList должен быть IEnumerable, так что view is

@Html.DropDownListFor(model => model.CompanyID, Model.Companies, "select company please ", new { @class = "form-control" }) 

Кроме того, модели просмотра не должны содержать модели данных, если вы редактируете какие-либо свойства этой модели. Если это так, замените GIS gis на каждое свойство GIS, которое вам нужно в представлении.

Смежные вопросы