Asp.net MVC UpdateModel()没有Magic String的前缀?

时间:2009-11-14 01:28:21

标签: asp.net asp.net-mvc

有没有任何方法可以使用没有魔术字符串的强类型UpdateModel(myEntity, MagicStringPrefix)

所以我有一个看起来像

的视图模型
public class FooViewModel {
    public Foo Foo { get; set; }
    ...
}

在我的控制器中我有

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, FormCollection collection)
{
    var foo = _fooRepo.GetFoo(id);

    try
    {
        UpdateModel(foo, "Foo");
        _fooRepo.Save();

        return RedirectToAction("Index");
    }
    catch (Exception ex)
    {
        return View(new FooViewModel(foo));
    }
}

我想这样做而不必使用魔术字符串。像UpdateModel(foo, Model.Foo)这样的东西就可以了。但是,我更喜欢只需要UpdateModel(foo)并让它推断前缀,因为Foo是类名,但我真的不想写自己的ModelBinder。

2 个答案:

答案 0 :(得分:3)

您可以定义自己的更新方法:

    protected void MyUpdateModel<T>(T model) where T : class
    {
        UpdateModel(model, model.GetType().Name);
    }

答案 1 :(得分:0)

如果您拥有所有属性名称匹配,则应该能够在操作方法中传入强类型对象。我认为您不需要编写自己的模型绑定来实现此目的。

阅读this blog以获得一些想法。