表单提交时,按钮值不会发布到Controller?

时间:2012-02-29 06:21:52

标签: html asp.net-mvc-3 forms

在我的视图中,有两个<input type="image">标记,它们位于表单中。 在我的Controller中,这两个<input type="image">的值始终显示为“null”。之前,使用<input type="submit">,值已发布到控制器。现在他们不是。可以告诉我如何在Controller中访问这些值吗?

查看:

@using (Html.BeginForm("Load", "Consent"))
{

//some code

<div id="button1" style="right:150px; width:90px; bottom :15px;position:absolute"><input type="image" src="../../img/ButtonBack.png" name="button" value="Previous" id="back" /></div>
<div id="button2" style="right:20px; width:90px; bottom :15px; position:absolute"><input type="image" src="../../img/ButtonNext.png" name="button" value="Acknowledge" id="ack" /></div>
</div>
}

表单已发布到控制器,但string button的值为“null”

控制器:

[HttpPost]
        public ActionResult Load(bool? chk_acknowledge, string button)
        {
           // some code
        }

3 个答案:

答案 0 :(得分:1)

浏览器不需要发布“value”属性的值,因此不要依赖它。值适用于广播和复选框输入字段:http://www.w3.org/TR/html401/interact/forms.html#edef-INPUT

但是,浏览器会发布另外两个表单字段: name .x和 name .y。您可以改为将两个图像按钮命名为“nextButton”和“prevButton”。在您的操作中,检查Request.Form是否包含“nextButton.x”。如果存在,则按下nextButton。同样,如果存在“prevButton.x”,则会按下prevButton。

答案 1 :(得分:0)

仅发布点击 图片按钮的值(仅点击提交的按钮)。虽然在表单中有2个图像按钮,但如果有另一个提交按钮并且您单击它,图像按钮将不会被发布。

例如:你点击div#button1里面的第一个图片按钮 - 在帖子数组中,会有[button] => Previous其他图片按钮不会被发布。

答案 2 :(得分:0)

来自specification

的引用
  

当使用指点设备点击图像时,表单为   提交并将点击坐标传递给服务器。 x值   以像素左边的像素和y中的y值来度量   图像顶部的像素。提交的数据包括   name.x = x-value和name.y = y-value其中“name”是的值   name属性,x值和y值是x和y坐标   价值,分别。

所以:

@using (Html.BeginForm("Load", "Consent"))
{
    ... some code

    <input type="image" src="@Url.Content("~/img/ButtonBack.png")" name="Previous" />
    <input type="image" src="@Url.Content("~/img/ButtonNext.png")" name="Acknowledge" />
}

然后:

[HttpPost]
public ActionResult Load(bool? chk_acknowledge)
{
    if (!string.IsNullOrEmpty(Request["previous.x"]))
    {
        // the Previous image button was clicked
    }
    else if (!string.IsNullOrEmpty(Request["acknowledge.x"]))
    {
        // the Acknowledge image button was clicked
    }

    ...
}