2011-11-09 6 views
-1

내 데이터가 포함 된 XML 파일이 있으며 드롭 다운 목록 저장에서이 XML에 문자열을 선택하고 싶습니다. 컨트롤러에서DropDownList에서 문자열 가져 오기

@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 및 ID 저장 작업으로 할 수 있지만 xml 저장 문자열 (팀 이름)에 저장하려고합니다. 도움을 주셔서 감사합니다

편집 : 컨트롤러 및보기 방법의 쇼 코드를 업데이트했습니다.

+0

문제는 여기에 무엇입니까? 작동하지 않는 것은 무엇입니까? 드롭 다운이 올바르게 렌더링되지 않습니까? 또는 텍스트 값을 가져 오는 방법을 모릅니다. 그렇다면 Team이라는 문자열 인수를 작업에 추가하면됩니다. – rouen

+0

DropDown이 올바르게 렌더링되고 있지만 실제로 가치를 얻는 방법을 모르겠습니다. 문자열 인수로 시도했지만 작동하지 않습니다. 오류가 발생했습니다 : 키 '팀'이있는 'IEnumerable '형식의 ViewData 항목이 없습니다. –

+0

양식과 게시 작업이 있습니까? 당신이하려는 일과 그렇지 않은 일에 대해 명확하지 않습니다. – jrummell

답변

1

Team 복합 속성 (DropDownList 도우미의 첫 번째 인수)으로 드롭 다운을 바인딩합니다. 이것은 말이되지 않습니다. 스칼라 값에만 바인드 할 수 있습니다. 나는 또한 도우미의 강력한 형식의 버전을 사용을 권장합니다 :

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

이 방법을 사용하면 드롭 다운 메뉴에서 선택한 값으로 POST 액션의 TeamID 속성을 채 웁니다.

또한 대체 :

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

로 :

@Html.ValidationMessageFor(model => model.Team.TeamID) 
+0

내가 이것을 시도하면 게시 할 때이 오류가 있습니다. 'Team.TeamID'키가있는 ViewData 항목은 'System.Int32'유형이지만 반드시 ' IEnumerable '입니다. DDL은 popolutated지만 캔트 게시물입니다. –