2015-04-15 3 views
0

У меня есть контроллер с действием, содержащий код, который выглядит какПреобразовать FormCollection объекта типа известен только во время выполнения

public ActionResult Index(FormCollection data) 
{ 
    var type = findTypeByName(data["CastToTypeName"]); 
    var model = transformRequestDataToType(data/* or may be Request*/, type) as DbEntity; 
    SaveData(model); 
    ... 
} 

Есть ли способ, чтобы преобразовать данные запроса к объекту выполнения известного типа? Я отправляю данные контроллеру с помощью <form> и пытаюсь найти решение без изменения данных формы в json.

+0

Это выглядит опасно. Довольно удобный способ для (гнусных) пользователей изменять любые данные БД, которые они хотят. – spender

+0

Это часть админ-части небольшого сайта, поэтому просто блокируйте любые возможности, добавляя auth для контроллера. – FLCL

+0

Полагает, что вы забываете форсировать классы классов для реализации интерфейса. Довольно важно, если вы хотите, чтобы MVC работал. –

ответ

0

Прежде всего, я упрощен ввод название обозначение, чтобы такие, как:

a.name 
a.items\ 
a.items/name 
a.items/desc 
a.items\ 
a.items/name 
a.items/desc 

был

a.name 
a.items.Index 
a.items[0].name 
a.items[0].desc 
a.items.Index 
a.items[1].name 
a.items[1].desc 

следующими извлечь данные из формы, прежде чем отправить с помощью JS, предотвращения отправки формы и отправить Ajax запрос сообщению с данными формы в url, определенными в атрибуте формы action. На стороне сервера я анализирую данные и рекурсивно назначаю их свойствам экземпляра данного типа. Так что я могу ParseAs<MyType>(Request) или даже ParseAsGiven(Request), когда установлено значение CastToTypeName.