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”,然后重试。 –