我有以下.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
?
答案 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)
{
...
}