dropdownlist Ustaw wybraną wartość w Mvc3 Razor
Oto mój model:
public class NewsCategoriesModel {
public int NewsCategoriesID { get; set; }
public string NewsCategoriesName { get; set; }
}
Mój Kontroler:
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);
}
A potem mój pogląd:
@Html.DropDownList("NewsCategoriesID", (SelectList)ViewBag.NewsCategoriesID)
Kiedy uruchamiam, DropDownList
nie wybiera ustawionej wartości.. Zawsze wybiera pierwszą opcję.
10 answers
Powinieneś używać modeli widoku i zapomnieć o ViewBag
myśl o tym, jakby nie istniał. Zobaczysz, jak łatwiej będzie. Zdefiniuj więc model widoku:
public class MyViewModel
{
public int SelectedCategoryId { get; set; }
public IEnumerable<SelectListItem> Categories { get; set; }
}
A następnie wypełnić ten model widoku z kontrolera:
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);
}
I na koniec użyj mocno wpisanegoDropDownListFor
helpera:
@model MyViewModel
@Html.DropDownListFor(
x => x.SelectedCategoryId,
Model.Categories
)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-24 14:15:58
Na wypadek, gdyby ktoś przyszedł z tym pytaniem, tak to robię, proszę zapomnij o obiekcie repozytorium, używam wzorca repozytorium, możesz użyć kontekstu obiektu, aby pobrać encje. A także nie zwracaj uwagi na moje nazwy encji, Moja Akcja typu encja nie ma nic wspólnego z akcją MVC.
Kontroler:
ViewBag.ActionStatusId = new SelectList(repository.GetAll<ActionStatus>(), "ActionStatusId", "Name", myAction.ActionStatusId);
Zwróć uwagę, że ostatnią zmienną konstruktora SelectList jest wybrana wartość (obiekt selectedValue)
To jest mój widok do renderowania:
<div class="editor-label">
@Html.LabelFor(model => model.ActionStatusId, "ActionStatus")
</div>
<div class="editor-field">
@Html.DropDownList("ActionStatusId")
@Html.ValidationMessageFor(model => model.ActionStatusId)
</div>
Myślę, że to dość proste, mam nadzieję, że to pomoże! :)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-15 10:52:35
Wywierciłem tworzenie rozwijanej listy zamiast używać @Html.DropDownList()
. Jest to przydatne, jeśli musisz ustawić wartość rozwijanej listy w czasie wykonywania w razor zamiast kontrolera:
<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>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-03 22:30:58
Cóż to bardzo proste w kontrolerze masz coś takiego:
-- Controller
ViewBag.Profile_Id = new SelectList(db.Profiles, "Id", "Name", model.Profile_Id);
--View (Opcja A)
@Html.DropDownList("Profile_Id")
-- View (Opcja B) -- > Wyślij wartość null do listy
@Html.DropDownList("Profile_Id", null, "-- Choose --", new { @class = "input-large" })
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-25 04:44:56
Zastąp poniższy wiersz nowym zaktualizowanym kodem roboczym:
@Html.DropDownList("NewsCategoriesID", (SelectList)ViewBag.NewsCategoriesID)
Teraz zaimplementuj nowy zaktualizowany kod roboczy :
@Html.DropDownListFor(model => model.NewsCategoriesID, ViewBag.NewsCategoriesID as List<SelectListItem>, new {name = "NewsCategoriesID", id = "NewsCategoriesID" })
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-11 22:14:19
Chcę umieścić poprawną odpowiedź tutaj, na wypadek, gdyby inni mieli ten problem, jak ja. Jeśli nie podoba Ci się ViewBag, w porządku, nie używaj go, ale prawdziwy problem z kodem w pytaniu jest taki, że ta sama nazwa jest używana zarówno dla właściwości modelu, jak i dla selectlist, jak zostało wskazane przez @RickAndMSFT
Po prostu zmiana nazwy kontrolki DropDownList powinna rozwiązać problem w następujący sposób:
@Html.DropDownList("NewsCategoriesSelection", (SelectList)ViewBag.NewsCategoriesID)
To tak naprawdę nie ma nic wspólnego z używaniem ViewBag lub nie używać ViewBag, ponieważ możesz mieć nazwę kolizji z kontrolą niezależnie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-11 02:09:24
Preferuję formę lambda pomocnika DropDownList-zobacz MVC 3 Layout Page, Razor Template, and DropdownList
Jeśli chcesz użyć SelectList, to myślę, że to zgłoszenie błędu może pomóc - http://aspnet.codeplex.com/workitem/4932
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:11
Code bellow, get from , goes
Kontroler:
int DefaultId = 1;
ViewBag.Person = db.XXXX
.ToList()
.Select(x => new SelectListItem {
Value = x.Id.ToString(),
Text = x.Name,
Selected = (x.Id == DefaultId)
});
Widok:
@Html.DropDownList("Person")
Uwaga: ViewBag.osoba i @ Html.DropDownList ("Person") nazwa powinna być taka jak w modelu widoku
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-11 07:58:02
Aby wybrać dział IT, gdy działy są ładowane z tabeli tblDepartment, użyj następującego przeciążonego konstruktora klasy SelectList. Zauważ, że przekazujemy wartość 1 dla parametru selectedValue.
ViewBag.Departments = new SelectList(db.Departments, "Id", "Name", "1");
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-10 07:26:47
Dla każdego, kto nie chce lub nie ma sensu używać dropdownlistfor, oto jak zrobiłem to w jQuery z. NET MVC skonfigurowany.
- Front end Javascript - > pobieranie danych z modelu:
var settings = @Html.Raw(Json.Encode(Model.GlobalSetting.NotificationFrequencySettings));
SelectNotificationSettings(settings);
function SelectNotificationSettings(settings) {
$.each(settings, function (i, value) {
$("#" + value.NotificationItemTypeId + " option[value=" + value.NotificationFrequencyTypeId + "]").prop("selected", true);
});
}
- w razor html, będziesz miał kilka dropdownlist
@Html.DropDownList(NotificationItemTypeEnum.GenerateSubscriptionNotification.ToString,
notificationFrequencyOptions, optionLabel:=DbRes.T("Default", "CommonLabels"),
htmlAttributes:=New With {.class = "form-control notification-item-type", .id = Convert.ToInt32(NotificationItemTypeEnum.GenerateSubscriptionNotification)})
I podczas ładowania strony, funkcja js ustawia wybraną opcję na podstawie wartości przechowywanej w modelu@.
Zdrówko.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-03-21 21:52:31