为什么我的DropDownList总是返回0值?

时间:2012-08-02 11:43:50

标签: c# asp.net-mvc razor html-select

我的网站有一个下拉列表和几个列表。目的是: 如果在下拉列表中选择名称,则应使用与所选名称相关的数据填充列表。

如果在下拉列表中选择其他名称,则始终返回与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>

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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>
<%} %> 

...在Controller中你有以下 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));
}