ЗАКЛЮЧИТЕЛЬНЫЙ РЕДАКТИРОВАНИЕ: проблема заключалась в том, что 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' в качестве значения по умолчанию.
Как эти свойства инициализируются в контроллере? – Andrei
@Andrei Список, поступающий из отредактированного кода, помещается в сумку для просмотра – sander
Не могли бы вы показать весь код контроллера? Не какой-либо один метод, бу фактическое назначение свойств ViewBag? Я подозреваю, что эти выпадающие списки имеют другое начальное состояние - первое имеет выбранное пустое значение, а второе имеет некоторое непустое значение. Таким образом, разница в их поведении. Но чтобы подтвердить, что необходим фактический код контроллера. – Andrei