Модель привязки и GET-запросы? - PullRequest
10 голосов
/ 20 апреля 2009

Существует множество примеров привязки модели в 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>

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

Ответы [ 2 ]

5 голосов
/ 21 апреля 2009

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

[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 голосов
/ 21 апреля 2009

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

...