2011-11-09 38 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ヘルパの最初の引数)にドロップダウンをバインドしています。これは意味をなさない。スカラー値にのみバインドできます。あなたがドロップダウンから選択した値でPOSTアクションでTeamIDプロパティを移入します。この方法では、

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

:私はまた、あなたがヘルパーの強く型付けされたバージョンを使用することをお勧めします。

も置き換える:

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

で:

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

これを試してみると、投稿時にこのエラーが発生します。 'Team.TeamID'キーを持つViewDataアイテムは 'System.Int32'タイプですが、 IEnumerable 'です。 DDLはポピュレートされていますが、ポストはありません。 –

関連する問題