Я унаследовал проект MVC, и у меня возникли некоторые проблемы, так как я очень плохо знаком с MVC и веб-разработкой в целом.
Проект содержит метод Controller Action, который генерирует представление. Этот метод может быть вызван, когда пользователь обращается к представлению напрямую через пользовательский интерфейс, или восстановить представление после того, как пользователь нажал кнопку в представлении, чтобы выполнить действие. Если представление восстанавливается после выполнения действия, на странице должно появиться подтверждающее сообщение.
В файле cshtml у нас есть следующее в MainWindow.cshtml, которое отображает таблицу в условном выражении только в том случае, если строка с именем «SavedMessage» существует в ViewBag и не является нулевой или пустой:
@{ string actionResult = ViewBag.SavedMessage; }
@if (!string.IsNullOrEmpty(actionResult))
{
<tr>
<td>
@actionResult
</td>
</tr>
}
В методе Action я пытаюсь использовать объект TempData для передачи строкового значения в действие, которое генерирует представление:
public partial class ApproveController : Controller
{
const string IDX_ACTIONRESULT = @"ActionResult";
public ActionResult MyAction(FormCollection collection)
{
try
{
string result_success = @"Action completed successfully";
//Do stuff
TempData[IDX_ACTIONRESULT] = result_success;
return RedirectToAction("MainWindow");
}
catch (Exception e)
{
Logger.reportException(e);
throw e;
}
}
}
В действии, которое генерирует представление, мы загружаем значение, сохраненное в TempData, в переменную, а затем проверяем, содержит ли переменная что-либо. Если переменная не равна нулю, я пытаюсь загрузить все, что она содержит, в ViewBag.
Действие «Создать представление»:
public partial class ApproveController : Controller
{
public ActionResult MainWindow()
{
//Do Stuff
var actionResult = TempData[IDX_ACTIONRESULT];
if (actionResult != null)
{
Log.info("Action Result Message: " + actionResult);
ViewBag.SavedMessage = actionResult;
}
else
Log.info("Action Result Message is NULL");
return View();
}
}
Возможное отведение:
Когда метод MainWindow () вызывается через пользовательский интерфейс, а не из Redirect из MyAction (), мой журнал указывает, что actionResult равен null , однако, когда он вызывается через Redirect из MyAction (), actionResult равен пустая строка . Это заставляет меня поверить, что MyAction () заполняет TempData чем-то , но я не могу понять, почему он не содержит строку, которую я назначаю в MyAction ().
Кто-нибудь видел здесь дымящийся пистолет?