Привязка модели и запросы GET?

Существует множество примеров привязки модели в html-формах, но мне интересно, возможно ли, и если да, то как использовать привязку модели для запросов ActionLinks/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 */
}

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

<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>

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


person Community    schedule 20.04.2009    source источник


Ответы (2)


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

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

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

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

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

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

person Nick DeVore    schedule 20.04.2009

Вы также можете использовать подшивка пользовательской модели. Также прочтите это.

person Andrei Rînea    schedule 21.04.2009
comment
Также +1 за отличный вопрос! - person Andrei Rînea; 21.04.2009