2010-05-06 4 views
0

У меня очень сложный вид и я использую модель MVC привязки, чтобы захватить всю информацию,Asp.net 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, кроме.

Когда я его отладки в хроме, объект Request.Form содержит значения, которые я бы ожидать, но после того, как модель связывания произошло, свойство ImageButton на ViewDataObject было установлено нулевое значение

Единственная разница что я вижу между значениями представления, что Chrome передает x как нижний регистр (ViewDataObject.ImageButton.x), а IE передает его как верхний регистр (ViewDataObject.ImageButton.X), но я не думал, что привязка модели приняла какое-либо уведомление обложки по названиям собственности

Есть ли идеи?

EDIT => Просто, чтобы уточнить, я не пытаюсь найти обходной путь для этого, я пытаюсь понять, почему эта техника не работает в Chrome, поскольку она работает во всех других браузерах и правильная данных передается через

ответ

0

есть несколько вариантов, позвольте мне перечислить вид

  1. Чтобы проверить, какая кнопка была нажата, вы могли бы дать все кнопки одинаковые имена, но разные идентификаторы. В вашем FormCollection на вашем Action Controller вы должны получить кнопку, нажатую, выполнив что-то вроде «collection [" buttonName "]" и проверив ее значение.

  2. Я думаю, что этот вариант правильный, и он выглядит следующим образом. Отделите свои формы должным образом. Вы можете иметь несколько форм на странице и привязывать каждого к своему собственному действию Controller, вам не нужно делать уродливые операторы if, и это действительно отлично отделяет ваши действия.

Я надеюсь, что это как-то ответит на ваш вопрос.

+0

К сожалению, я должен был объяснить далее. Я не ищу другого способа сделать это (я всегда мог проверить значения формы явно, а не полагаться на привязку модели). Я пытаюсь понять, почему это не работает в Chrome, учитывая, что эта технология отлично работает в каждом другом браузере, а Chrome передает данные правильно –

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