我有一个非常复杂的表单,我正在使用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中不起作用,因为它适用于所有其他浏览器并且正确的数据正在通过
答案 0 :(得分:0)
有几个选项,让我列出一个视图
要检查按下了哪个按钮,您可以为所有按钮指定相同的名称,但不同的ID。在Controller Action的FormCollection中,您应该能够通过执行“collection [”buttonName“]”之类的操作来获取按下的按钮并检查它的值。
我认为这个选项是正确的选择,如下所示。正确分开表格。你可以在一个页面上有多个表单,并将每个表单绑定到它自己的Controller Action,你不需要做丑陋的if语句,它实际上可以很好地分离你的行为。
我希望这能以某种方式回答你的问题。
答案 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