我有ViewModel,View使用这个viewmodel和controller
在视图中我有这样的输入字段:
@ Html.EditorFor(model => model.TransitApplication.ApplicationDate)
和字段名称为TransitApplication_ApplicationDate
我想从数据库中的视图更新一些数据但是有一个问题
控制器更新源
public ActionResult Update(int id, FormCollection collection)
{
string prefix = "TransitApplication";
TransitApplication transitApplication = transitApplicationRepozitory.GetById(id);
if (transitApplication == null)
return Content("Error! Not Found!");
if (TryUpdateModel(transitApplication, prefix))
{
if (ModelState.IsValid)
{
transitApplicationRepozitory.Update(transitApplication);
transitApplicationRepozitory.Save();
return RedirectToAction("Index");
}
}
return Content("Error!");
}
我想以编程方式使用前缀(TransitApplication)名称,而不是像我一样 string prefix =“TransitApplication”;
一些建议?
答案 0 :(得分:0)
看到表单前缀是使用Model属性的Class Name构建的,那么:
if (TryUpdateModel(transitApplication, typeof(TransitApplication).Name))
这删除了你的魔术字符串 - 虽然这实际上并不是模型类中的属性名称,但我猜测如果你重命名了类,你可能也想重命名模型上引用的属性 - 尽管它有点脆。
另一种方法是你可以使用类似this GetPropertyInfo method的东西,它允许你将属性名称作为一个字符串,如var propertyInfo = GetPropertyInfo(yourModelObject, u => u.UserID);
- 尽管你的动作当前没有实例化的模型类大气压。