将输入参数传递给ActionResult MVC 4

时间:2013-06-02 00:01:15

标签: .net asp.net-mvc-4

我有以下.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

3 个答案:

答案 0 :(得分:1)

在DropDownList上指定一个名称参数,该参数指示该值用于“ID”参数。 name =“id”,应该解决它。

答案 1 :(得分:0)

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

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

但您的BeginForm操作是

PlayerList

所以我的赌注是你发错了。

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

答案 2 :(得分:0)

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

将您的操作更改为

[HttpPost]
public ActionResult PlayersList(int teams = 0)
{
    ...
}