Модель представления связывания из сообщения формы с внутренними сложными типами - PullRequest
0 голосов
/ 15 апреля 2010

Хорошо, я получил видовую модель следующим образом:

public class PageViewModel
{
    public Item Item { get; set; }
...

    public PageViewModel
    { }

    public PageViewModel(Item itemWebPage)
    {
    ...
    }
}

Я использую форму для редактирования этого элемента, используя маршрут как: / Controller / Редактировать / 43

Контроллер использует этот код:

    [AcceptVerbs("GET")]
    public new ActionResult Edit(int id)
    {
    ...
        PageViewModel pageViewModel = new PageViewModel(...);

        return PartialView(pageViewModel);
    }

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Edit(int id, PageViewModel item)
    {
        if (ModelState.IsValid)
        {
    ...
    // Here, the item.Item.ID is null, I want it to map to the id of the route.
        }

        return PartialView("Edit", item);
    }

То, чего я хочу добиться, - это идентификатор свойства: item.Item.ID, который будет привязан к идентификатору из URL-адреса (маршрута). Однако я не могу заставить его работать. Я пытался использовать атрибут [Bind ()]. ​​

Я исправил это сейчас, используя скрытое поле в форме, например:

<%= Html.HiddenFor(model => model.Item.ID)%>

Однако это выглядит немного странно. Я хотел бы знать, есть ли лучший способ сделать это чище?

1 Ответ

1 голос
/ 15 апреля 2010

Лично я бы установил параметр ID в объявлении формы следующим образом:

<% using (Html.BeginForm("Edit", "YourController", FormMethod.Post, new { id = model.Item.ID })) { %>

...

<% } %>
...