у меня есть 4 выпадающих и как я могу редактировать и сохранять данные mvc2 - PullRequest
1 голос
/ 23 сентября 2011

У меня есть 4 раскрывающихся списка, вставка работает и как я могу редактировать данные и сохранять данные в db mvc2.При обновлении произошла ошибка: элемент ViewData с ключом «SelectedTimeZone» имеет тип «System.String», но должен иметь тип «IEnumerable

My Controller

    public ActionResult Edit(int id)
            {
                return View(EventModel.Edit(id));

            }

            [AcceptVerbs(HttpVerbs.Post)]
            [ValidateInput(false)] 
            public ActionResult Edit(int id, EventInfo EventInfo)
            {

                    if (ModelState.IsValid)
                    {
                        EventModel.Edit(EventInfo);
                        return RedirectToAction("Index");
                    }
                    return View(EventInfo); 

            }

Model

    public SelectList TimeZones { get; set; }
            public SelectList EventType { get; set; }

            private string selectedTimeZone = "";
            public string SelectedTimeZone
            {
                get { return selectedTimeZone; }
                set { selectedTimeZone = value; }
            }


   Load Function



      myEventInfo.TimeZones = new SelectList(EventModel.getTIMEZOMES, "Key", "Value");
         myEventInfo.SelectedTimeZone = Datareader["TIMEZONE"].ToString();

    public static IList<KeyValuePair<string, string>> getTIMEZOMES
            {
                get
                {
                    Dbhelper DbHelper = new Dbhelper();
                    IList<KeyValuePair<String, String>> Timezone = new List<KeyValuePair<String, String>>();
                    DbCommand cmd = DbHelper.GetSqlStringCommond("SELECT * FROM TMP_TIMEZONES");
                    DbDataReader Datareader = DbHelper.ExecuteReader(cmd);
                    while (Datareader.Read())
                    {
                        Timezone.Add(new KeyValuePair<String, String>(Datareader["ABBR"].ToString(), Datareader["NAME"].ToString()));
                    }

                    return Timezone;
                }
            }

View page

     <%= Html.DropDownListFor(model => model.SelectedTimeZone, Model.TimeZones, "Select Timezone", new { style = "width:200px", @class = "textfield165" })%>
                            <%= Html.ValidationMessageFor(model => model.SelectedTimeZone)%>

. При обновлении возникла ошибка / ViewDataэлемент, имеющий ключ 'SelectedTimeZone', имеет тип 'System.String', но должен иметь тип 'IEnumerable

1 Ответ

1 голос
/ 23 сентября 2011

В вашем действии POST вы забыли заполнить свойство TimeZones в случае ошибки. Не забывайте, что только выбранный часовой пояс POSTed, но не список часовых поясов, поэтому, если вы когда-нибудь захотите снова отобразить то же представление (например, в случае ошибки), убедитесь, что вы связали этот список (так же, как вы его связали в действии GET, которое позволило вам отобразить форму на первом месте):

[AcceptVerbs(HttpVerbs.Post)]
[ValidateInput(false)] 
public ActionResult Edit(int id, EventInfo EventInfo)
{
    if (ModelState.IsValid)
    {
        EventModel.Edit(EventInfo);
        return RedirectToAction("Index");
    }

    // Here you must populate the TimeZones property before returning the view
    EventInfo.TimeZones = new SelectList(EventModel.getTIMEZOMES, "Key", "Value");
    return View(EventInfo); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...