Получить строку из DropDownList - PullRequest
0 голосов
/ 09 ноября 2011

У меня есть XML-файл, который содержит мои данные, и я хочу из выпадающего списка сохранить строку выбора в этот xml.На мой взгляд, у меня есть это:

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
    <legend>MatchXML</legend>
    ...
    <div class="editor-label">
        @Html.LabelFor(model => model.Team)
    </div>
    <div class="editor-field">
        @Html.DropDownList("Team", (SelectList)ViewBag.Team, String.Empty)
        @Html.ValidationMessageFor(model => model.Team)
    </div>
    ...

    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset>

}

В контроллере:

    public ActionResult Pridat()
    {
        ViewBag.Team = new SelectList(repo.GetTeams(), "Name", "Name");
        return View();
    }
    [HttpPost]
    public ActionResult Pridat(MatchXML match, string Team)
    {
        if (ModelState.IsValid)
        {
            try
            {
                ViewBag.Team = new SelectList(repo.GetTeams(), "Name", "Name");
                match.Team = repo.GetTeamByName(Team);
                repo.AddMatch(match);
                return RedirectToAction("Index");
            }
            catch (Exception ex)
            {
                //error msg for failed insert in XML file
                ModelState.AddModelError("", "Error creating record. " + ex.Message);
            }
        }

        return View(match);
    }

Модели выглядит:

public class MatchXML
{
    public int MatchXMLID { get; set; }
    public string Opponent { get; set; }
    public DateTime MatchDate { get; set; }
    public string Result { get; set; }
    public Team Team { get; set; }
    public int Round { get; set; }
}

public class Team
{
    public int TeamID { get; set; }
    public string Name { get; set; }
    public virtual User Coach { get; set; }
    public virtual ICollection<Player> Players { get; set; }
}

Я пыталсясделать некоторые изменения, чтобы сделать это, но это не работает.Я могу сделать это с TeamID и сохранением идентификатора, но я хочу в строке сохранения XML (название команды).Спасибо за помощь

Редактировать: Я обновил код показа контроллера и метод просмотра.

1 Ответ

1 голос
/ 09 ноября 2011

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

@Html.DropDownListFor(x => x.Team.TeamID, (SelectList)ViewBag.Team, String.Empty)

Таким образом, вы будете заполнять свойство TeamID в действии POST выбранным значением из раскрывающегося списка.

Также замените:

@Html.ValidationMessageFor(model => model.Team)

на:

@Html.ValidationMessageFor(model => model.Team.TeamID)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...