2009-11-14 3 views
1

Есть ли способ иметь строго типизированный UpdateModel(myEntity, MagicStringPrefix) без волшебной строки?Asp.net MVC UpdateModel() Префикс без магической строки?

Так что у меня вид модель выглядит как

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) будет в порядке. Тем не менее, I предпочитает, чтобы просто иметь UpdateModel(foo) и указать его префикс, данный Foo - это имя класса, но я действительно не хочу писать собственный ModelBinder.

ответ

3

Вы можете определить свой собственный метод обновления:

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

Похоже, это то, что мне нужно делать. Позор, это не в основном MVC. Это похоже на довольно распространенную функциональность. Возможно, это будет в MVC2 ... –

0

Вы должны быть в состоянии передать строго типизированный объект в свой метод действия при условии, что у вас есть все имя свойства. Я не думаю, что вам нужно написать свою собственную привязку модели для достижения этого.

Прочтите this blog, чтобы получить представление.

+0

Это использует объект в качестве модели представления. Это прекрасно работает. Проблема в том, что я использую ClientViewModel.Client, который требует от меня использовать префикс. –

Смежные вопросы