RedirectToAction не работает должным образом - PullRequest
1 голос
/ 21 ноября 2011

У меня есть простое приложение MVC3, для которого я хочу получить некоторые сведения о конфигурации из службы, разрешить пользователю редактировать и сохранять конфигурацию.

Если в процессе сохранения обнаружены какие-либо ошибки, они должны быть возвращены и сообщены пользователю.

Проблема заключается в том, что не удается вызвать конфигурацию, содержащую ошибки, исохраненные в данный момент значения просто отображаются заново.

Пошаговое выполнение кода, при обнаружении ошибок он должен перенаправить на себя, используя переданный объект конфигурации, но это не так, и он использует метод без параметров.

Кто-нибудь может увидеть, где я иду не так?

Ниже приведены два вызываемых метода контроллера:

//
// GET: /Settings/Edit/
    public ActionResult Edit()
{
    SettingsViewModel config = null;

    // Set up a channel factory to use the webHTTPBinding
    using (WebChannelFactory<IChangeService> serviceChannel =
        new WebChannelFactory<IChangeService>(new Uri(baseServiceUrl)))
    {
        // Retrieve the current configuration from the service for editing
        IChangeService channel = serviceChannel.CreateChannel();
        config = channel.GetSysConfig();
    }

    ViewBag.Message = "Service Configuration";

    return View(config);
}

//
// POST: /Settings/Edit/
[HttpPost]
public ActionResult Edit( SettingsViewModel config)
{
    try
    {
        if (ModelState.IsValid)
        {
            // Set up a channel factory to use the webHTTPBinding
            using (WebChannelFactory<IChangeService> serviceChannel = new WebChannelFactory<IChangeService>(new Uri(baseServiceUrl)))
            {
                IChangeService channel = serviceChannel.CreateChannel();
                config = channel.SetSysConfig(config);

                // Check for any errors returned by the service
                if (config.ConfigErrors != null && config.ConfigErrors.Count > 0)
                {
                    // Force the redisplay of the page displaying the errors at the top
                    return RedirectToAction("Edit", config);
                }
            }
        }

        return RedirectToAction("Index", config);
    }
    catch
    {
        return View();
    }
}

1 Ответ

2 голосов
/ 21 ноября 2011
return RedirectToAction("Index", config);

Вы не можете передавать сложные объекты, подобные этому, при перенаправлении.Вам нужно будет передать параметры строки запроса один за другим:

return RedirectToAction("Index", new {
    Prop1 = config.Prop1,
    Prop2 = config.Prop2,
    ...
});

Также я не смог увидеть действие Index в вашем контроллере.Может быть, это опечатка.Еще одна вещь, которую я заметил, это то, что у вас есть действие Edit GET, к которому вы, вероятно, пытаетесь перенаправить, но это действие Edit не принимает никаких параметров, поэтому это просто кажется странным.Если вы пытаетесь перенаправить на действие POST Edit, то это, очевидно, невозможно, поскольку перенаправление всегда находится в GET по самой своей природе.

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