2013-06-02 60 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) 
{ 
    ... 
}