2013-06-02 56 views
3

我有以下.cshtml通输入参数的ActionResult MVC 4

<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 
          })); 
         }); 
        }); 
    }); 

为什么当我点击提交按钮,没有任何标识参数传递给ActionResult PlayerList

+0

显示你的行动结果代码。 – RyanJMcGowan

+0

@Ryan ... ActionResult看起来像这样:'public ActionResult PlayersList(int id = 0){...}'方法被调用,但id始终是0. –

+0

您是否包含[HTTPPOST]属性? – RyanJMcGowan

回答

0

你说你的ActionResult样子(注意 'S')

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

但你BeginForm行动

PlayerList 

所以我的办法是,你正在发布到错误的行动。

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

+0

我的坏 - 只是一个错字。我在哪里设置名称属性? –

+0

你正在使用'@ Html.DropDownListFor(Model => Model.Teams ...',所以它已经生成了一个名称的字段,它必须匹配动作的参数名 – BrunoLM

+0

非常感谢@BrunoLM,我将它改为:' @ Html.DropDownList(“Id”,...)'和一切按预期工作。 –

1

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

0

如果你看从浏览器的调试控制台的网络请求,你会看到你的形式发布Teams,但你的行动期待id从未被送到所以默认为0它没有被发送,因为你没有一个字段名为id

你的动作改为

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