Вы можете использовать System.Reflection
, чтобы получить свойства объекта по их имени с помощью Type.GetProperty(string name)
. После того как вы получили PropertyInfo
, вы можете использовать SetValue
для присвоения ему значения.
foreach (string key in HttpContext.Current.Request.Form.AllKeys) {
// note that "value" is a reserved word, do not use it as variable name
string val = HttpContext.Current.Request.Form[key];
var propertyInfo = typeof(TblEmployee).GetProperty(key); // can maybe be moved outside of the loop
if (propertyInfo != null) {
propertyInfo.SetValue(employee, val);
}
}
Это будет работать для строковых свойств. Если свойство другого типа, вам нужно найти правильный тип (опять же, используя отражение) и привести строковое значение перед его присвоением.
Обратите внимание, что не правильный подход для хранения данных в MVC. Вы не должны работать с Request.Form
напрямую, вместо этого ваше действие POST должно принять ViewModel, который можно сопоставить (например, с помощью Automapper ) с сущностью БД. То есть пусть ASP ModelBinder выполнит свою работу вместо того, чтобы заново изобретать колесо!
[HttpPost]
public ActionResult Submit(MyViewModel postData) {
var employee = Mapper.Map<TblEmployee>(postData);
_ctx.Employees.Add(employee);
_ctx.SaveChanges();
return new HttpStatusCodeResult((int)HttpStatusCode.OK);
}