Подтвердить что ты не робот

Dropdownlist задает выбранное значение в MVC3 Razor

Вот моя модель:

public class NewsCategoriesModel {
    public int NewsCategoriesID { get; set; }        
    public string NewsCategoriesName { get; set; }
}

Мой контроллер:

public ActionResult NewsEdit(int ID, dms_New dsn) {
    dsn = (from a in dc.dms_News where a.NewsID == ID select a).FirstOrDefault();
    var categories = (from b in dc.dms_NewsCategories select b).ToList();
    var selectedValue = dsn.NewsCategoriesID;
    SelectList ListCategories = new SelectList(categories, "NewsCategoriesID", "NewsCategoriesName",selectedValue);

    // ViewBag.NewsCategoriesID = new SelectList(categories as IEnumerable<dms_NewsCategory>, "NewsCategoriesID", "NewsCategoriesName", dsn.NewsCategoriesID);
    ViewBag.NewsCategoriesID = ListCategories;
    return View(dsn);
}

И затем мое мнение:

@Html.DropDownList("NewsCategoriesID", (SelectList)ViewBag.NewsCategoriesID)

Когда я запускаю, DropDownList не выбирает значение, которое я устанавливаю. Он всегда выбирает первый вариант.

4b9b3361

Ответ 1

Вы должны использовать модели просмотра и забыть о ViewBag Подумайте об этом, как будто этого не было. Вы увидите, как все станет проще. Поэтому определите модель представления:

public class MyViewModel
{
    public int SelectedCategoryId { get; set; }
    public IEnumerable<SelectListItem> Categories { get; set; } 
}

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

public ActionResult NewsEdit(int ID, dms_New dsn)
{
    var dsn = (from a in dc.dms_News where a.NewsID == ID select a).FirstOrDefault();
    var categories = (from b in dc.dms_NewsCategories select b).ToList();

    var model = new MyViewModel
    {
        SelectedCategoryId = dsn.NewsCategoriesID,
        Categories = categories.Select(x => new SelectListItem
        {
            Value = x.NewsCategoriesID.ToString(),
            Text = x.NewsCategoriesName
        })
    };
    return View(model);
}

и, наконец, в вашем представлении используйте строго типизированный помощник DropDownListFor:

@model MyViewModel

@Html.DropDownListFor(
    x => x.SelectedCategoryId,
    Model.Categories
)

Ответ 2

на всякий случай кто-то приходит с этим вопросом, так я это делаю, пожалуйста, забудьте о объекте репозитория, я использую шаблон репозитория, вы можете использовать свой контекст объекта для извлечения объектов. А также не обращайте внимания на мои имена сущностей, мой тип объекта Действие не имеет ничего общего с действием MVC.

Контроллер:

ViewBag.ActionStatusId = new SelectList(repository.GetAll<ActionStatus>(), "ActionStatusId", "Name", myAction.ActionStatusId);

Обратите внимание, что последней переменной конструктора SelectList является выбранное значение (object selectedValue)

Тогда это мое представление, чтобы сделать это:

<div class="editor-label">
   @Html.LabelFor(model => model.ActionStatusId, "ActionStatus")
</div>
<div class="editor-field">
   @Html.DropDownList("ActionStatusId")
   @Html.ValidationMessageFor(model => model.ActionStatusId)
</div> 

Я думаю, что это довольно просто, надеюсь, это поможет!:)

Ответ 3

Ну его очень просто в контроллере у вас есть что-то вроде этого:

- Контроллер

ViewBag.Profile_Id = new SelectList(db.Profiles, "Id", "Name", model.Profile_Id);

- Вид (вариант A)

@Html.DropDownList("Profile_Id")

- Вид (Вариант B) → Отправить нулевое значение в список

@Html.DropDownList("Profile_Id", null, "-- Choose --", new {  @class = "input-large" })

Ответ 4

Замените ниже строку новым обновленным рабочим кодом:

@Html.DropDownList("NewsCategoriesID", (SelectList)ViewBag.NewsCategoriesID)

Теперь выполните новый обновленный рабочий код:

@Html.DropDownListFor(model => model.NewsCategoriesID, ViewBag.NewsCategoriesID as List<SelectListItem>, new {name = "NewsCategoriesID", id = "NewsCategoriesID" })

Ответ 5

Я хочу привести правильный ответ здесь, на случай, если у других возникнут такие проблемы, как я. Если вы ненавидите ViewBag, не используйте его, но реальная проблема с кодом в вопросе заключается в том, что одно и то же имя используется как для свойства модели, так и для selectlist, как было указано @RickAndMSFT

Простое изменение имени элемента управления DropDownList должно решить проблему, например:

@Html.DropDownList("NewsCategoriesSelection", (SelectList)ViewBag.NewsCategoriesID)

На самом деле это не имеет никакого отношения к использованию ViewBag или не использует ViewBag, поскольку вы можете столкнуться с конфликтом имен с элементом управления независимо.

Ответ 6

Я развернул формирование выпадающего списка вместо @Html.DropDownList(). Это полезно, если вам нужно установить значение раскрывающегося списка во время выполнения в бритве вместо контроллера:

<select id="NewsCategoriesID" name="NewsCategoriesID">
    @foreach (SelectListItem option in ViewBag.NewsCategoriesID)
    {
        <option value="@option.Value" @(option.Value == ViewBag.ValueToSet ? "selected='selected'" : "")>@option.Text</option>

    }
</select>

Ответ 8

ниже, перейти от, идет

Контроллер:

int DefaultId = 1;
ViewBag.Person = db.XXXX
        .ToList()
        .Select(x => new SelectListItem {
            Value = x.Id.ToString(),
            Text = x.Name,
            Selected = (x.Id == DefaultId)
        });

Вид:

@Html.DropDownList("Person")

Примечание: ViewBag. Лицо и @Html.DropDownList( " Лицо" ) должно быть таким, как в модели просмотра

Ответ 9

Чтобы выбран ИТ-отдел, когда отделы загружены из таблицы tblDepartment, используйте следующий перегруженный конструктор класса SelectList. Обратите внимание, что мы передаем значение 1 для параметра selectedValue.

ViewBag.Departments = new SelectList(db.Departments, "Id", "Name", "1");