2012-08-02 93 views
1

我有一个网站,下拉列表和几个列表。意图是: 如果您在下拉列表中选择一个名称,则应该使用与所选名称相关的数据填充列表。为什么我的DropDownList总是返回0值?

如果您在下拉列表中选择其他名称,则与0索引相关的名称将始终返回。

我需要更改我的来源,以便显示我选择的名称?

我该如何为ViewBag.ID_Artiest提供所选名称的“键”值?

<form id="form1" runat="server"> 
    <label for="ArtiestenLijst">Selecteer artiest:</label> 

    <% using (Html.BeginForm("OnChange", "HitdossierController", FormMethod.Post, new { ID_Artiest = "DoChange" })) %> 
    <% { %> 
     <%= Html.LabelFor(x => x.ID_Artiest)%> 
     <%= Html.DropDownListFor(
       x => x.ID_Artiest, 
       new SelectList(ViewBag.ArtiestenLijst, "Value", "Text"), 
       "-- Selecteer artiest --", 
       new 
       { 
        @onchange = @"this.form.submit();" 
       })%> 
    <%} %> <br /> 
    <br /> 
    <div id="divPartialView"> 
     <%= Html.Action("Detail_Hitdossier", new { AID_Artiest = ViewBag.ID_Artiest })%> <br /> 
    </div> 
</form> 

回答

0

谢谢您的快速回答。

我通过使用FormCollection找到了解决方案。选择后,我再次调用操作索引,但超载为HttpPost。

在Index.aspx的你会发现这样的代码:

<% using (Html.BeginForm("Index", "Hitdossier", FormMethod.Post, new { id = "frmArtiest" })) %> 
<% { %> 
    <label for="ArtiestenLijst">Selecteer artiest:</label> 
    <%= Html.DropDownList("ID_Artiest", 
      new SelectList(ViewBag.ArtiestenLijst, "Value", "Text"), 
      "-- Selecteer artiest --", 
      new 
      { 
       @onchange = "document.getElementById('frmArtiest').submit();" 
      })%> 
    <br /> 
    <br /> 
    <div id="divPartialView"> 
     <%= Html.Action("Detail_Hitdossier", new { AID_Artiest = ViewBag.ID_Artiest })%> <br /> 
    </div> 
<%} %> 

...并在控制器你以下的ActionResult的:

public ActionResult Index(int? AID_Artiest=810000) 
{ 
    ReadSelectie(AID_Artiest.Value); 

    ViewBag.ID_Artiest = _ArtiestInfoModel.ID_Artiest; 
    ViewBag.ArtiestenLijst = _ArtiestInfoModel.ArtiestenLijst; 

    return View(); 
} 

[HttpPost] 
public ActionResult Index(FormCollection ACollection) 
{ 
    int iID_Artiest; 
    int.TryParse(ACollection["ID_Artiest"], out iID_Artiest); 
    return Index(iID_Artiest); 
} 

public ActionResult Detail_Hitdossier(int? AID_Artiest) 
{ 
    int iID_Artiest = AID_Artiest ?? 810000; 

    return View(GetArtiestData(iID_Artiest)); 
} 
0

问题是最有可能的,当你回发到控制器,你不与你的下拉列表重新填充“ViewBag.ArtiestenLijst”。我会使用模型来存储您的值,而不是使用ViewBag。这样,当您从帖子中返回视图时,它仍会包含您的项目列表。