Переопределение Create () ActionResult? - PullRequest
0 голосов
/ 21 июня 2011

Я работаю над своим "первым" приложением MVC 3 и озадачен следующей проблемой. В основном у меня есть контактная форма, которая собирает входные данные и сохраняет в БД. На странице со списком всех представлений контактов я хочу, чтобы пользователь (в будущем это будет роль администратора) мог выбрать один контакт на странице списка контактов и нажать «Сделать клиентом», чтобы вызвать мой ClientController и преобразовать этот контакт в клиент. На странице ClientController также есть метод Create () для ввода новой записи клиента с нуля, поэтому во избежание сложности этого метода я пытаюсь создать действие «Создать», которое принимает contactID в качестве параметра.

У меня есть следующий код на странице списка контактов:

@Html.ActionLink("Make Client", "Make", "Client", new { id = item.ID }, null)

Когда клиентский контроллер выглядит следующим образом:

    [HttpGet]
    public ActionResult Create()
    {
        return View(new Client());
    }

    //
    // GET: /Make
    //  used for converting a Contact record into a Client
    [HttpGet]
    public ActionResult Make(int contactID)
    {
        try
        {
            var contactModel = _db.Contacts.Single(r => r.ID == contactID);

            var clientModel = new Client()
            {
                FirstName = contactModel.FirstName,
                LastName = contactModel.LastName,
                <snip> . . . ,
                ZipCode = contactModel.ZipCode
            };

            return View(new Client(clientModel));
        }
        catch (Exception ex)
        {

            base.ViewData["Exception"] = "Exception: " + ex.InnerException.ToString();
            throw;
        }
    }

Проблема в том, что контактный идентификатор, полученный в Make (int contactID), всегда равен нулю. Мне удалось настроить некоторые вещи, чтобы заставить работать следующее, вызвав стандартный Create () ActionResult с параметром int, допускающим значение nullable, но это выглядит так:

    [HttpGet]
    public ActionResult Create(int? id)
    {
        if (id == null)
        {
            return View(new Client());
        }
        else
        {
            return (Make(id));
        }
    }

Суть в том, что я могу вызывать этот Create () ActionResult, параметр не является нулевым, но когда я вызываю Make () напрямую, параметр не передается. Есть ли что-то особенное в Create (), которое делает эту работу?

Спасибо, и я открыт для других альтернатив.

1 Ответ

3 голосов
/ 21 июня 2011

Аргумент действия действия Make называется contactID, поэтому при создании ссылки на это действие используйте это имя:

@Html.ActionLink(
    "Make Client", 
    "Make", 
    "Client", 
    new { contactid = item.ID }, 
    null
)

Это успешно передаст правильное значение в качестве аргумента при вызове действия Make. Таким образом, вам больше не нужен твик в действии Create.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...