MVC Form Form元素不会进入控制器操作

时间:2016-01-20 15:09:56

标签: asp.net-mvc razor

我认为我必须做些傻事,但如果有人能指出我做错了什么,那就太好了!

我在Razor视图中有一个表单,如:

            @using (Html.BeginForm("Index", "SiteKPIs", FormMethod.Get))
            {
                <table>
                    <tr>
                        <td style="margin-right: 25px;">Site</td>
                        <td>@Html.DropDownList("siteId", new SelectList(ViewBag.Sites, "SiteID", "SiteDisplayName"))</td>
                    </tr>
                    <tr>
                        <td>Range</td>
                        <td>
                            <select id="rangeId"><option value="0">test</option></select>
                            <input class="btn btn-primary btn-xs" type="submit" value="Go" />
                        </td>
                    </tr>
                </table>
            }

我的控制器操作的签名如下:

    public ActionResult Index(int? siteId, int? rangeId)

我得到了siteId的值,但是rangeId为null。我做错了什么?

2 个答案:

答案 0 :(得分:1)

如果你想使用普通的html选择,那么你需要在你的Controller Action中将你选择的Name属性设置为预期的param名称:

<select id="rangeId" name="rangeId"><option value="0">test</option></select>

但我的建议是使用DropDownList帮助程序。

答案 1 :(得分:0)

我认为最好使用HtmlHelper作为下拉列表,如下所示:

<div class="form-group">
    <label for="range">Range</label><br />
    @Html.DropDownList("RangeID", null, "Please select...", 
        new { @class = "form-control", id = "rangeID" })
</div>

然后,在您的控制器中,您可以在那里填充下拉列表,例如:

List<SelectListItem> options = new List<SelectListItem>();

options.Add(new SelectListItem { Text = "Test", Value = "0"});
// and so on...

然后,您可以在控制器中使用ViewBag并使其等于此列表,如下所示:

ViewBag.RangeID = options;