2011-11-09 375 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项具有'Team'键。 –

+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但不能发布。 –