1

控制器...T4MVC Html.BeginForm有多個輸入提交

[HttpPost] 
public virtual ActionResult PickAColour(ColourModel model, 
             string imgbtn, string returnUrl) { 

和視圖...

@using (Html.BeginForm(MVC.Home.PickAColour(Model,"",(string)ViewBag.ReturnUrl))) { 
    @Html.LabelFor(m => m.SomeProperty) 
    @Html.TextBoxFor(m => m.SomeProperty) 
    ... 
    ... 
    <p>Now pick a colour</p> 
    <input type="image" name="imgbtn" src="@Links.Content.Images.A_png" value="A"/> 
    <input type="image" name="imgbtn" src="@Links.Content.Images.B_png" value="B"/> 
    <input type="image" name="imgbtn" src="@Links.Content.Images.C_png" value="C"/> 
    <input type="image" name="imgbtn" src="@Links.Content.Images.D_png" value="D"/> 
    <input type="image" name="imgbtn" src="@Links.Content.Images.E_png" value="E"/> 
    <input type="image" name="imgbtn" src="@Links.Content.Images.F_png" value="F"/> 
} 

現在,這是行不通的,因爲我沒有通過imgbtn參數放入方法中。我不知道做什麼是正確的方法?

回答

2

您必須使用正確的方法重載:

@Html.BeginForm(MVC.Home.ActionNames.PickAColour, MVC.Home.Name, 
       new { imgbtn = "", returnUrl = (string)ViewBag.ReturnUrl }, 
       FormMethod.Post, null) 

而對於複雜的模型對象Model,則可以使用類似上面的路線值也通不過。點擊一個提交按鈕時應該提交這個,以便ASP.NET MVC Model Binder可以完成它的工作。

+0

我用你的方式做了一個測試,它運行,但是當調試進入PickAColour方法時仍然是字符串imgbtn = null。看起來像我原來的方法調用一樣的結果? – Tom

+0

另外,順便說一句,Model對象實際上都不錯,returnUrl也很好。只有imgbtn參數似乎沒有連接起來。 – Tom

+0

嘗試更改此參數的名稱以進行測試...爲輸入提供id =「imgbtn」,然後重試。 –