benyblack
@
۲ دي ۱۳۸۹-۱۵:۱۷
MVC dynamic action
بعضی وقت ها نیاز است که با یک Action بتوانیم انواع ویو و Object رو مدیریت کنیم. فکر می کنم مثال زیر گویاست:
[HttpPost]
public ActionResult Create(BaseContent model) {
ModelBindingContext md = new ModelBindingContext();
string assemblyName = typeof(Link).Assembly.FullName;
string fullTypeName = "DNE.CM.Centers.Data.Virt." + model.Type.UpperFirst();
var obj = Activator.CreateInstance(assemblyName, fullTypeName);
Type T = typeof(Link).Assembly.GetType(fullTypeName);
var center = obj.Unwrap();
// Bind model
ModelMetadata modelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => center, T);
md.ModelMetadata = modelMetadata;
md.ValueProvider = new FormValueProvider(ControllerContext);
dynamic bindResult = ModelBinders.Binders.DefaultBinder.BindModel(ControllerContext, md);
bindResult.Save();
return RedirectToAction("Edit", new { id = bindResult.Id });
}