2009-04-20 11 views
10

Существует множество примеров привязки модели в html-формах, но мне интересно, можно ли использовать и привязать модель к ссылкам ActionLinks/GET, и если да, то как это сделать.привязки модели и запросы GET?

Таким образом, учитывая следующую модель

public class Lurl 
{ 
    public string Str {get;set;} 
    public char Chr {get;set;} 
    public double Dbl {get;set;} 
} 

и следующий маршрут (я не знаю, как это будет сформировано, я представляю его, чтобы показать, как я хотел бы URL-адрес представляет свойства Str, Chr и Dbl)

routes.MapRoute(
    "LurlRoute", 
    "Main/Index/{str}/{chr}/{dbl}", 
    new 
    { 
     controller = "Main", 
     action = "Index", 
     lurl = (Lurl)null 
    } 
); 

Я хотел бы использовать его таким образом в моем контроллере

[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult Index(Lurl lurl) 
{ 
    /* snip */ 
} 

в d таким образом на моей странице (два возможных варианта; есть ли еще?)

<div class="links"> 
    <%Html.ActionLink("Link one", "Index", new { lurl = Model })%><br /> 
    <%Html.ActionLink("Link two", "Index", 
     new { str = Model.Str, chr = Model.Chr, dbl = Model.Dbl })%> 
</div> 

Возможно ли это с помощью инфраструктуры привязки модели? И если да, то что нужно сделать с моими образцами, чтобы заставить их работать?

ответ

5

Я думаю, вы должны выбрать либо класс в качестве параметра подхода

[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult Index(Lurl lurl) 
{ 
    /* snip */ 
} 

или свойства в качестве параметров приближаются

[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult Index(string str, char chr, double dbl) 
{ 
    /* snip */ 
} 

... хотя в классе в качестве подхода параметра , вы можете использовать метод «UpdateModel». Вы можете передать белый список параметров, которые хотите обновить с помощью этого метода, только если вы хотите обновить несколько значений в своей модели.

Также, в вашем MapRoute, какой параметр будет отображаться на вашем маршруте? Я уверен, что там должна быть некоторая корреляция.

3

Вы также можете использовать custom model binder. Также читайте this.

+0

Также +1 для отличного вопроса! –