3

我有以下 .cshtml

    <fieldset>
      <legend></legend>
      <p>
        @using (Html.BeginForm("PlayerList", "Players", new{id = "Id"}, FormMethod.Post))
        {
            @Html.DropDownListFor(Model => Model.Teams, new SelectList(Enumerable.Empty<SelectListItem>(), "Id", "Name"),
               "Select a Team", new { id = "ddlTeams" }) <input type="submit" value="Get Player List" />
        }
      </p>
    </fieldset>

DropDownList 由一些 javascript 填充:

$("#ddlComps").change(function () {
        var compid = $(this).val();
        $.getJSON("../Players/LoadTeamsByCompId", { compid: compid },
                     function (teamsData) {
                        var select = $("#ddlTeams");
                        select.empty();
                        select.append($('<option/>', {
                            value: 0,
                            text: "Select a Team"
                        }));
                        $.each(teamsData, function (index, itemData) {
                            select.append($('<option/>', {
                                value: itemData.Value,
                                text: itemData.Text
                            }));
                        });
                     });
    });

为什么单击提交按钮时,没有将 Id 参数传递给 ActionResult PlayerList

4

3 回答 3

1

在 DropDownList 上指定一个 name 参数,指示该值用于“ID”参数。name="id" 这应该可以解决。

于 2013-06-02T01:32:47.180 回答
0

你说你的 ActionResult 看起来像(注意's')

public ActionResult PlayersList(int id = 0){...}

但是您的 BeginForm 操作是

PlayerList

所以我敢打赌,您发布的操作是错误的。

您还必须将字段name属性设置为您对操作的期望。

于 2013-06-02T01:38:21.693 回答
0

如果您从浏览器的调试控制台查看网络请求,您将看到您的表单正在发布Teams,但您的操作期望id从未发送,因此默认为 0。它没有被发送,因为您没有名为 的字段id

将您的操作更改为

[HttpPost]
public ActionResult PlayersList(int teams = 0)
{
    ...
}
于 2013-06-02T02:05:57.120 回答