ValidationSummary не отображается с частичными представлениями - PullRequest
1 голос
/ 24 января 2012

У меня есть эта проблема:

Я захожу на страницу, такую ​​как:

/Auction/Details/37

, и это вызывает метод действия:

public ActionResult Details(int id)

Определенная строкав этом методе:

return View("DetailsLub", auction);

Это представление содержит следующую строку:

@Html.Action("BidOnAuction", new { auctionId = Model.Id })

Какой метод вызова вызывает этот метод:

public PartialViewResult BidOnAuction(int auctionId)

Пока все хорошо?

Теперь у меня есть форма в представлении BidOnAuction, в которой есть кнопка.Когда я нажимаю на эту кнопку, вызывается этот метод действия:

[HttpPost]
public ActionResult BidOnAuction(BidOnAuctionViewModel model)

Этот метод действия имеет оператор catch со следующими строками:

ModelState.AddModelError(string.Empty, operation + @" Failure: " + message);
return RedirectToAction("Details", new { id = model.AuctionId });

Теперь и представление DetailsLUB, ипредставление BidOnAction содержит следующую строку:

@Html.ValidationSummary (true)

Но проблема в том, что на экран ничего не выводится.Что я делаю не так?

Ответы [ 3 ]

2 голосов
/ 24 января 2012

InOrder для получения сообщения проверки на странице, которую необходимо вернуть, с представлением Model, так как модель имеет внутри себя State Model, что-то вроде этого:

return View(Model);

Это вернет модель BidOnAuctionс итогом проверки.

1 голос
/ 24 января 2012

Вы не можете перенаправить на новое действие и ожидать, что состояние модели будет там.

Если modelState недействительно, просто верните (с View (модель)), иначе перенаправьте к деталям.

Если вам нужна информация об ошибке в подробном представлении, вам нужно добавить ее в TempData или передать в качестве необязательного параметра.

1 голос
/ 24 января 2012

Эта строка кода

return RedirectToAction("Details", new { id = model.AuctionId });

Возвращает экземпляр класса RedirectResult .Это обычно используется для перенаправлений и не отображает представление.Если вы хотите отобразить дочернее действие в родительское представление, используя @Html.Action, вам нужно вернуть представление из этого дочернего действия, а не RedirectResult.И этот RedirectResult не будет работать, даже если нет дочерних действий.Возврат RedirectResult заставляет браузер выдавать новый, новый запрос на это действие.И модель все равно теряется.Вы должны сделать что-то вроде

try
{
    //some actions
    return RedirectResult("Details", new { id = model.AuctionId });
}
catch
{
    ModelState.AddModelError(string.Empty, operation + @" Failure: " + message);
    return View("Details", new { id = model.AuctionId });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...