如何在MVC3 Razor中获取输入字段前缀名称

时间:2012-02-01 07:34:15

标签: asp.net-mvc-3 razor prefix

我有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”;

一些建议?

1 个答案:

答案 0 :(得分:0)

看到表单前缀是使用Model属性的Class Name构建的,那么:

if (TryUpdateModel(transitApplication, typeof(TransitApplication).Name))

这删除了你的魔术字符串 - 虽然这实际上并不是模型类中的属性名称,但我猜测如果你重命名了类,你可能也想重命名模型上引用的属性 - 尽管它有点脆。

另一种方法是你可以使用类似this GetPropertyInfo method的东西,它允许你将属性名称作为一个字符串,如var propertyInfo = GetPropertyInfo(yourModelObject, u => u.UserID); - 尽管你的动作当前没有实例化的模型类大气压。