В проекте MVC5 я открываю модальное диалоговое окно, и в случае возникновения исключения я хочу открыть это диалоговое окно и отобразить сообщение в div в этом диалоговом окне. Насколько я вижу, я должен следовать этому подходу как рендеринг частичного просмотра в строку, но большинство примеров не работает в MVC5, как на Return Partial View and JSON from ASP.NET MVC Action. Есть ли какой-либо аналогичный или лучший подход для MVC5?Возвращение Partialview & JSON от контроллера MVC 5
ответ
Вы можете сделать следующее
Решение 1 (используя частичный вид)
[HttpPost]
public ActionResult YourAction(YourModel model)
{
if(model!=null && ModelState.IsValid)
{
// do your staff here
Response.StatusCode = 200; // OK
return PartialView("ActionCompleted");
}
else
{
Response.StatusCode = 400; // bad request
// ModelState.ToErrors() : is an extension method that convert
// the model state errors to dictionary
return PartialView("_Error",ModelState.ToErrors());
}
}
Ваш частичный вид должен выглядеть следующим образом:
<div id="detailId">
<!-- Your partial details goes here -->
....
<button type="submit" form="" value="Submit">Submit</button>
</div>
ваш сценарий
<script>
$(document).ready(function(){
$('#formId').off('submit').on('submit', function(e){
e.preventDefault();
e.stopPropagation();
var form = $('#formId');
$.ajax({
url: form.attr('action'),
data: form.serialize(),
method: 'post',
success : function(result){
$('#detailId').replaceWith(result);
// another option you can close the modal and refresh your data.
},
error: function(data, status, err){
if(data.status == 400){
$('#detailId').replaceWith(data.responseText);
}
}
});
});
});
</script>
Решение 2 (с использованием JSon)
в своем действии
[HttpPost]
public ActionResult YourAction(YourModel model)
{
if(model!=null && ModelState.IsValid)
{
// do your staff here
return Json(new {status = 200,
//...any data goes here... for example url to redirect
url=Url.Content("YourRedirectAction","Controller")},
}
else
{
return Json(new {status= 400,errors = ModelState.ToErrors()});
}
}
и ваш скрипт должен выглядеть
<script>
$(document).ready(function(){
$('#formId').off('submit').on('submit', function(e){
e.preventDefault();
e.stopPropagation();
var form = $('#formId');
$.ajax({
url: form.attr('action'),
data: form.serialize(),
method: 'post',
success : function(result){
if(result.status==200) { // OK
// you might load another action or to redirect
// this conditions can be passed by the Json object
}
else{ // 400 bad request
// you can use the following toastr based on your comment
// http://codeseven.github.io/toastr/demo.html
var ul = $('<ul>')
for(var error in result.errors)
{
ul.append('<li><b>' + error.Key + '</b>:' + error.Value + '</li>;
}
toastr["warning"](ul[0].outerHTML);
}
}
});
});
});
</script>
Наконец, если вы хотите удлиняющей ModelState.ToErrors()
public static IEnumerable ToErrors(this ModelStateDictionary modelState)
{
if (!modelState.IsValid)
{
return modelState.ToDictionary(kvp => kvp.Key,
kvp => kvp.Value.Errors
.Select(e => e.ErrorMessage).First())
.Where(m => m.Value.Count() > 0);
}
return null;
}
надеюсь, что это вам поможет
Большое спасибо, я попробую. Проголосовал + –
@binary это сработало с вами? – Monah
На самом деле, но я предпочел использовать другой подход и отображать сообщение тоста без открытия модального диалога. Спасибо ... –
Это верный пример, я использовал эту технику много раз. Если это простой вызов вызова, я бы предложил сделать частичный просмотр данных, которые вы хотите показать, и называть их через jquery с кодом ниже.
$("#result").load("@Url.Action("Account","HelloPartial")");
это будет загружать частичный вид его самого во всплывающем окне. вам не придется преобразовывать его в строки.
- 1. PartialView MVC - функция PartialView отличается от вида
- 2. Возвращение различных представлений от MVC-контроллера
- 3. Возвращение JSON Результат от Апи контроллера
- 4. возвращение объекта json от контроллера к jsp
- 5. Возвращение ответа JSON от контроллера в laravel
- 6. Как отформатировать json от контроллера MVC 5 следующим образом?
- 7. Возвращение JSON из контроллера
- 8. Модель отправить от PartialView до контроллера
- 9. генерировать JSON из контроллера MVC 5 asp.net
- 10. MVC 5 - повышающий Bootstrap Modal от контроллера
- 11. MVC PartialView()
- 12. Возвращение действительного зрения от контроллера
- 13. ASP.NET MVC - Возвращение PartialView в Ajax вместе с другим объектом
- 14. MVC 5 обновить страницу от контроллера, вызванного вызовом AJAX
- 15. Возвращение логики от контроллера в View Laravel 5
- 16. Возвращение двух размерных массивов как json из контроллера mvc
- 17. Создайте массив Json от контроллера MVC
- 18. JSON от js до контроллера MVC
- 19. Возвращение 403 от контроллера webapi2
- 20. Как использовать OutputCache в контроллерах PartialView в MVC 5, C#?
- 21. MVC C# Возвращаемый файл с контроллера перед возвратом PartialView
- 22. Как вызвать PartialView снаружи контроллера в ASP.NET 5
- 23. MVC 5 JQuery Bootstrap Modal с помощью PartialView
- 24. Возвращение JSON из контроллера Web API
- 25. Циклы PartialView MVC Назад к предыдущему PartialView
- 26. JSON "возвращение JSON()" Fix MVC 4
- 27. Возвращение RDF из действия контроллера - ASP.NET MVC
- 28. возвращение url.action как объект JSON MVC
- 29. Возвращение JSON с контроллером web-api MVC
- 30. Refresh partialview
вы хотите показать ошибки на модальном, а не на частичном представлении с ошибками? – Monah
На самом деле я представляю частичный вид для создания, обновления и т. Д., И если в методе Create action в контроллере есть ошибка, я хочу отобразить частичное представление _Error вместо _Create и отобразить некоторые сообщения (возвращенные из метода действий как json) в частичном просмотре. –