Asp.net MVC - 模型绑定图像按钮

时间:2010-05-06 11:06:09

标签: asp.net asp.net-mvc button model-binding

我有一个非常复杂的表单,我正在使用MVC模型绑定来捕获所有信息

我已将其设置为捕获所有可能发生的提交,因为表单上有大约10个不同的提交按钮,还有2个图像按钮

我试图通过捕获图像按钮提交得到一点聪明(或者我认为),并创建了一个子类,以便我可以捕获返回的x值

public class ImageButtonViewData {
    public int x { get; set; }
    public string Value { get; set; }
}

父类看起来像这样

public class ViewDataObject {
    public ImageButtonViewData ImageButton { get; set; }

    public ViewDataObject(){
        this.ImageButton = new ImageButton();
    }
}

图像按钮的html看起来像

<input type="image" id="ViewDataObject_ImageButton" name="ViewDataObject.ImageButton" />

除Chrome之外的所有浏览器都可以正常使用。

当我在chrome中调试它时,Request.Form对象包含我期望的值,但在模型绑定发生后,ViewDataObject上的ImageButton属性已设置为null

我可以在提交值之间看到的唯一区别是Chrome将x作为小写传递(ViewDataObject.ImageButton.x)并且IE将其作为大写传递(ViewDataObject.ImageButton.X)但我没有想到该模型绑定在属性名称上采用了套管的任何通知

有没有人有任何想法?

EDIT =&gt;只是为了澄清,我不是要为此找到解决方法,我试图弄清楚为什么这种技术在Chrome中不起作用,因为它适用于所有其他浏览器并且正确的数据正在通过

2 个答案:

答案 0 :(得分:0)

有几个选项,让我列出一个视图

  1. 要检查按下了哪个按钮,您可以为所有按钮指定相同的名称,但不同的ID。在Controller Action的FormCollection中,您应该能够通过执行“collection [”buttonName“]”之类的操作来获取按下的按钮并检查它的值。

  2. 我认为这个选项是正确的选择,如下所示。正确分开表格。你可以在一个页面上有多个表单,并将每个表单绑定到它自己的Controller Action,你不需要做丑陋的if语句,它实际上可以很好地分离你的行为。

  3. 我希望这能以某种方式回答你的问题。

答案 1 :(得分:0)

我无法重现您的问题,但我不认为图像输入会返回一个值,只有.x和.y。以下适用于Chrome,Firefox和IE(对不起vb.net):

Public Class ImageButtonViewData
    Public Property X As String
    Public Property Y As String

    Public ReadOnly Property WasClicked As Boolean
        Get
            Return Not String.IsNullOrEmpty(X)
        End Get
    End Property

End Class