2012-05-15 2 views
0

ЗАКЛЮЧИТЕЛЬНЫЙ РЕДАКТИРОВАНИЕ: проблема заключалась в том, что ViewBag.PropName == Model.PropName; ИСПРАВЛЕНИЕ: ViewBag.PropName ===> ViewBag.PropName2Вопросы валидации на скрытом ASP.NET MVC3 DropDownListFor

Это мое первое сообщение; Я новичок и думаю, что испортил макет ... так жаль! Я столкнулся с некоторыми проблемами с проверкой на стороне клиента для скрытого dropdownlistfor. Я работаю с ASP.NET MVC3 и имею много скрытых ddl на этой странице. Валидация, однако, не работает для некоторых ddl. У кого-нибудь была проблема с этим раньше?

Это 2 объекта недвижимости; 1 рабочий, 1 неудачу

//VALIDATION FAILS 
[Required] 
[Range(0, 4)] 
public int TiresBack { get; set; } 

//VALIDATION WORKS 
[Required] 
[Range(0, 4)] 
public int TechnicalState { get; set; } 

Это часть бритвы:

<tr>//THIS DOESN'T WORK 
    <td style="width: 38%;"> 
     @txtFor("tiresBack") 
    </td> 
//This is JQuery Star-Rating. 
    <td align="center" id="starsTiresBack"> 
    </td> 
    <td>        
     @Html.DropDownListFor(model => model.TiresBack, ViewBag.TiresBack as IEnumerable<SelectListItem>, new { style = "display:none;" }) 
     <input class="blueButton" type="button" id="btnBrandRearTires" value="@txtFor("brandTiresBack")" /> 
     <span>@Html.ValidationMessageFor(model => model.TiresBack)</span> <span>@Html.ValidationMessageFor(model => model.BrandRearTires)</span> 
    </td> 
</tr> 
//THIS WORKS 
<tr> 
    <td style="width: 38%;"> 
     @txtFor("technicalState")        
    </td> 
    <td id="starsTechnicalState" align="center"> 
    </td> 
    <td> 
     @Html.DropDownListFor(model => model.TechnicalState, ViewBag.TechState as IEnumerable<SelectListItem>, new { style = "display:none;" }) 
     <input class="blueButton" type="button" id="btnTechnicalStateDescription" value="@txtFor("technicalStateDescriptionButton")" style="display:none;"/> 
     <span>@Html.ValidationMessageFor(model => model.TechnicalState)</span> <span>@Html.ValidationMessageFor(model => model.TechnicalStateDescription)</span> 
    </td> 
</tr> 

EDIT1: инициализируется в контроллере с помощью этого метода:

public static List<SelectListItem> CreateDefaultStateList(int? selected = -1) 
    { 
     List<SelectListItem> sl = new List<SelectListItem>(); 
     for (int i = -1; i < 5; i++) 
     { 
      SelectListItem sli = new SelectListItem(); 
      if (i == 0 || i == -1) 
       sli.Text = ""; 
      else 
       sli.Text = i.ToString(); 
      sli.Value = i.ToString(); 
      if (i == selected) 
       sli.Selected = true; 
      sl.Add(sli); 
     } 
     return sl; 
    } 

EDIT2: Создать контроллер. defaultstatelist - это то, что было возвращено из метода, опубликованного выше.

List<SelectListItem> defaultStateList = CreateDefaultStateList(); 

[Authorize] 
public ActionResult Create() 
{ 
    FillViewBag(); 
    ViewBag.PropX = defaultStateList; 
    ViewBag.TiresFront = defaultStateList; 
    ViewBag.TechState = defaultStateList; 
    ViewBag.PropY= defaultStateList; 
    ViewBag.PropZ= defaultStateList; 
    ViewBag.PropA= defaultStateList; 
    ViewBag.PropB= defaultStateList; 
    ViewBag.PropC= defaultStateList; 
    ViewBag.PropD= defaultStateList; 

    return View(); 
} 

Ввод этого сообщения Я замечаю значение по умолчанию в методе. Это может быть так ... ==> Пробовал, не так ли. Обновлен код до '-1' в качестве значения по умолчанию.

+0

Как эти свойства инициализируются в контроллере? – Andrei

+0

@Andrei Список, поступающий из отредактированного кода, помещается в сумку для просмотра – sander

+0

Не могли бы вы показать весь код контроллера? Не какой-либо один метод, бу фактическое назначение свойств ViewBag? Я подозреваю, что эти выпадающие списки имеют другое начальное состояние - первое имеет выбранное пустое значение, а второе имеет некоторое непустое значение. Таким образом, разница в их поведении. Но чтобы подтвердить, что необходим фактический код контроллера. – Andrei

ответ

0

Проблема была в том, что ViewBag.PropName == Model.PropName; Исправить: Переименовать ViewBag.PropName на что-то еще, как ViewBag.PropName2.