c # передать строку от действия другому - PullRequest
1 голос
/ 17 июля 2011

Представьте себе страницу, где пользователь может обновлять, удалять, редактировать или даже голосовать за ввод. Поскольку каждое действие будет обрабатываться отдельным ActionResult, URL-адрес страницы должен будет измениться в случае ошибок. Мой вопрос прост: скажем, ваша страница "http://localhost/Input/", и когда у вас есть какие-то ошибки, я хочу перенаправить на" http://localhost/Input/Error" и отобразить сообщение об ошибке. Я не хочу использовать сессии для этого, поэтому, пожалуйста, не показывайте мне эту ссылку . В принципе, хочу, я хочу сделать это что-то похожее:

public ActionResult Create(FormCollection form) { 
        try {
            // some code here
            return RedirectToAction("Index");
        }
        catch () {
             string errorMessage = "You have done something bad!"; 
             // and I want to pass this string to my Error Action.
             return RedirectToAction("Error"); 
        }
}

Решение, которое я использовал

Я знаю, что сказал, что не хочу использовать TempData, но, очевидно, это лучший вариант, и я использовал это для своей проблемы. Что касается ответа, я выбрал ответ DigBySwift, потому что это наиболее логичная вещь, которую вы можете сделать, если не хотите использовать Session для этого типа операций.

Ответы [ 3 ]

4 голосов
/ 17 июля 2011

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

Вы можете передать id / enum на следующую страницу, а затем получить ошибку на основе переданного параметра:

return RedirectToAction("Error", new { ErrorId = 4 });

public ActionResult Error(int errorId){ ... }

Редактировать : Альтернативой (так как чтение-запись в БД было бы дорого, учитывая), было бы записать сообщение в файл cookie, а затем извлечь его после перенаправления и затем удалить файл cookie. Это не здорово, и я лично не буду использовать это. Но если вам нужно настроить сообщение, это вариант.

1 голос
/ 17 июля 2011

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

0 голосов
/ 17 июля 2011

Я хотел бы предложить альтернативный способ. Я использую AJAX для выполнения этих типов операций, поэтому вместо перенаправления пользователя в другое представление я могу вернуть представление или, в основном, частичное представление из моего контроллера. Таким образом, я могу использовать это строковое сообщение прямо внутри моего представления, используя ViewBag.

public ActionResult Create(FormCollection form) { 
    try {
        // some code here
        return View('CreationSuccess');
    }
    catch () {
         ViewBag.errorMessage = "You have done something bad!"; 
         // and I want to pass this string to my Error Action.
         return View('CrudError');
    }
}
...