У меня есть представление, в котором он просматривает модель и отображает детали в редактируемом режиме. Одним из значения модели от списка выбора, как показано нижеКак установить значение по умолчанию для выбора списка в MVC во время выполнения
@if (Model != null)
{
for (int i = 0; i < Model.provider_service_dtls.Count; i++)
{
<tr>
<td> @Html.DropDownListFor(m => m.provider_service_dtls[i].activity_code_type,
(SelectList)@ViewBag.activity_code_type, "--- Select Activity Code Type ---", new { @class = "m-wrap" })</td>
<td>@Html.TextBoxFor(m => m.provider_service_dtls[i].activity_name)</td>
</tr>
}
}
Здесь ViewBag.activity_code_type
содержат значения Internal & Standard
при подаче, если пользователь выбрал Internal
его значение 1
переходит к контроллеру и если Standard
будет 2
и здесь по умолчанию значение будет "--- Select Activity Code Type ---"
Теперь, когда я открываю тот же запрос в режиме редактирования, если значение модели для provider_service_dtls[i].activity_code_type
является 1
выбор списка должен быть выбран по умолчанию как Internal
и Standard
, если это 2
.
Я закодированы как этот
@Html.DropDownListFor(m => m.provider_service_dtls[i].activity_code_type,
(SelectList)@ViewBag.activity_code_type, Model.provider_service_dtls[i].activity_code_type)
Но это не работает, как ожидается, он дает результат, как показано на рисунке ниже
Здесь должен по умолчанию выбран Internal
. Каковы изменения, которые необходимо достичь?
Edited
Модель
public partial class provider_service_dtls
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long service_id { get; set; }
public long preapproval_id { get; set; }
public string activity_code_type { get; set; }
public string activity_type { get; set; }
public string activity_type_name { get; set; }
public string activity_code { get; set; }
public string activity_name { get; set; }
public string internal_activity_code { get; set; }
public string internal_activity_name { get; set; }
[ForeignKey("preapproval_id"), InverseProperty("provider_service_dtls")]
public virtual provider_preapproval preapproval { get; set; }
}
шаблон Редактор
@model Provider.Models.provider_preapproval
@Html.DropDownListFor(m => m.activity_code_type, (SelectList)ViewData["options"])
Посмотреть
Внутри цикл я закодированы как этот
@Html.EditorFor(m => m.provider_service_dtls,
new { options = (SelectList)@ViewBag.activity_code_type })
Я получаю сообщение об ошибке
«System.Web.Mvc.HtmlHelper» делает не содержит определения для «EditorFor», а лучший метод расширения перегрузки 'System.Web.Mvc.Html.EditorExtensions.EditorFor (System.Web.Mvc.HtmlHelper, System.Linq.Expressions.Expression>, строка, объект)' имеет некоторые недопустимые аргументы
, поэтому я не могу использовать это внутри forloop? – Sachu
Ну есть еще один вариант, но это означает, что вам нужно построить новый 'SelectList' на каждой итерации (не очень эффективный). Его также единственный способ, которым это будет работать, если вы будете использовать 'ListBoxFor()', поэтому я предлагаю вам использовать «EditorTemplate», который является гораздо лучшим подходом. Не говоря уже о том, что теперь у вас есть многоразовый элемент управления, поэтому где-нибудь еще в вашем приложении вам нужно создавать элементы управления для типа, вы можете просто использовать '@ Html.EditorFor()' –
Также ваше использование '@ Html.DropDownListFor()' в последнем фрагменте кода неверно. Третий параметр предназначен для генерации 'optionLabel' (т.е.' '--- Select Activity Code Type ---" ', который вы использовали ранее), поэтому ваше второе изображение показывает' '1" 'как первый вариант –