2015-05-14 2 views
1

Пусть следующий код:MVC. Bind TextBoxFor в поле типа объекта

public class Person 
{ 
    public object Age { get; set;} 
} 

Внутренний вид:

@Html.TextBoxFor(x => x.Age, new { @type = "number" }) 

Теперь при отправке формы, свойство TYPEOF person.Age является string[1]. Зачем?

Не должно быть какого-либо типа ввода, Type логика пикапа, когда вы связываете вещи?

ответ

2

Вы не можете использовать помощники *For в собственности типа object. Эти помощники должны делать вывод типа, чтобы создать правильный тип ввода с правильным именем и атрибутами. object может быть буквально ничего.

Я не уверен, почему вы используете object для объекта, такого как Age (разве это не очевидно, int?). Однако, если вам действительно нужно это сделать, я бы рекомендовал использовать модель представления, в которой вы можете определить более конкретный тип для целей вашего представления. Затем вы можете просто отобразить опубликованное значение на свой object.

+0

Хм, может ли это быть разрешено с помощью пользовательской DataAnnotation что-то вроде '[DataType (DataType.CreditCard)]' или с помощью настраиваемого связующего? –

+0

Нет. Аннотации данных не помогут. Они не сообщают о методах ввода-вывода. Вы можете * что-то сделать с помощью настраиваемого связующего устройства, но это очень хакерский способ приблизиться к нему и намного сложнее, чем просто использовать модель представления. Действительно, вы должны использовать модели просмотра, даже если не для этой конкретной проблемы, так или иначе. –

+0

Спасибо! Это допустимое решение. –