2016-12-15 2 views
0

Была такая задача. У меня есть метод контроллера удаленияОбработка исключений с использованием модального

public ActionResult Delete(int? id) 
    { 
     if (id == null) 
     { 
      return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
     } 
     try { 
      TechnologicalCard technologicalCard = db.TechnologicalCards.Find(id); 
      db.TechnologicalCards.Remove(technologicalCard); 
      db.SaveChanges(); 
      return RedirectToAction("Index");    
     } 
     catch (Exception ex) 
     { 
      ViewBag.Error = true; 
      TempData["message"] = "someMessage"; 
      return RedirectToAction("Index"); 
     }   
    } 

Как я могу сделать это было бы, когда исключение во время удаления модального появилось с предупреждающим текстом?

UPDATE

Я добавил индексный метод

public ActionResult Index() 
    { 
     var id_Head = User.Identity.GetUserId(); 
     TempData["message"] = "someMessage"; 
     var technologicalCards = db.TechnologicalCards.Where(c => c.IdHeadDepartment == id_Head).ToList(); 
     return View(technologicalCards); 
    } 

Мой взгляд имеет содержит следующий код

@model IEnumerable<AccountingPlusProject.Models.TechnologicalCard> 

@{ 
ViewBag.Title = "Учёт+"; 
} 

<style> 
.md-form { 
    position: relative; 
    top: 40px; 
    width: 20%; 
    height: 20%; 
    text-align: center; 
} 

.img1 { 
    background-image: url("/Content/avatars/Head.jpg"); 
    background-repeat: no-repeat; 
    width: 7%; 
    height: 65px; 
    border-style: none; 
    margin-left: 90%; 
    margin-top: -8%; 
} 

.img2 { 
    width: 7%; 
    height: 65px; 
    border-style: none; 
    margin-left: 80%; 
} 

h2 span { 
    color: white; 
    font: bold 24px/45px Helvetica, Sans-Serif; 
    letter-spacing: -1px; 
    background: rgb(0, 0, 0); 
    background: rgba(0, 0, 0, 0.7); 
    padding: 10px; 
} 

.demo-card-wide.mdl-card { 
    width: 512px; 
} 

.demo-card-wide > .mdl-card__title { 
    color: #fff; 
    height: 176px; 
} 

.demo-card-wide > .mdl-card__menu { 
    color: #fff; 
} 

.container { 
    margin: 30px auto; 
    width: 85%; 
    height: 100%; 
} 

.warningMessage { 
    font-weight: bold; 
    color: Red; 
} 
</style> 
<script> 
$(function() { 
    if ($('#myModal').length) { 
     $('#myModal').modal('show'); 
    } 
}); 
</script> 



<nav class="navbar navbar-light teal lighten-4" style="height: 100px"> 
<div class="container"> 
    <div class="collapse navbar-toggleable-xs" id="collapseEx2" style="margin-top:-2%"> 
     <img src="~/Content/truelogo.png" style="margin-left:-10%" /> 
     @Html.ActionLink("Добавить технологическую карту", "Create", null, new { @class = "btn btn-success" }) 
     <img src="~/Content/avatars/Head.jpg" class="rounded-circle img-responsive img1"> 
     @Html.ActionLink("Отмена", "Index", "HeadDepartment", null, new { @class = "btn btn-danger", @style = "margin-left:100%; margin-top:-11%" }) 
    </div> 
</div> 
</nav> 

<div class="page-content"> 
<div class="container"> 
    @{int i = 1;} 
    <table> 
     @foreach (var item in Model) 
     { 
      if (i % 4 == 1) 
      { 
       <tr></tr> 
      } 
      <td> 
       <div class="card"> 
        <img class="img-fluid" src="@item.Image" alt="Card image cap"> 
        <div class="card-block"> 
         <center> 
          <hr /> 
          <h4 class="card-title">@item.NameProduct</h4> 
          <hr /> 
          @item.Description 
          <hr /> 
          @{ var materials = item.SelectedMaterials.ToList();} 

          @foreach (var material in materials) 
          { 
           @Html.DisplayFor(model => material.ReferenceMaterial.NameMaterial) <b>&nbsp;Штук:&nbsp;</b> 
           @Html.DisplayFor(model => material.CountMaterial) 
           <br /> 
          } 
          <br /> 
          <center> 
           @Html.ActionLink("Настроить материалы", "EditMaterial", new { id = item.IdTechnologicalCard }, new { @class = "btn btn-success" }) 
           <br /> 
           @Html.ActionLink("Настроить количество", "EditCountOfMaterial", new { id = item.IdTechnologicalCard }, new { @class = "btn btn-success" }) 
          </center> 
          <hr /> 

          @Html.ActionLink("Удалить", "Delete", new { id = item.IdTechnologicalCard }, new { @class = "btn btn-danger" }) 




         </center> 
        </div> 
       </div> 
      </td> 
           i++; 

           } 
    </table> 
</div> 
@if (TempData["message"] != null) 
{ 
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria- labelledby="myModalLabel"> 
    <div class="modal-dialog" role="document"> 
     <div class="modal-content"> 
      <div class="modal-header"> 
       <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> 
       <h4 class="modal-title" id="myModalLabel">Modal title</h4> 
      </div> 
      <div class="modal-body"> 
       121212 <!--add your message here--> 
      </div> 
      <div class="modal-footer"> 
       <button type="button" class="btn btn-default" data- dismiss="modal">Close</button> 
       <button type="button" class="btn btn-primary">Save changes</button> 
      </div> 
     </div> 
    </div> 
</div> 
} 
</div> 

Но когда я удалить редирект на Индексный без модального

+0

Я не имею ни малейшего представления об asp.net, но хорошая идея о 'bootstrap-modal' все еще хочет спросить. Поддерживает ли ваше приложение или asp.net методы отдыха? –

ответ

0

Обработка исключений используя modal

Как вы ясно дали понять, что вы хотите показать ошибку в окне modal, вот что вы можете сделать.

Вам необходимо снова назначить данные TempData в другом TempData с помощью вашего Index метода. Поскольку TempData жив только от одного контроллера к другому.

И добавьте этот код в свой индексный указатель.

@if (TempData["message"] != null) 
{ 
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> 
    <div class="modal-dialog" role="document"> 
    <div class="modal-content"> 
     <div class="modal-header"> 
     <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> 
     <h4 class="modal-title" id="myModalLabel">Modal title</h4> 
     </div> 
     <div class="modal-body"> 
     @TempData["message"] <!--add your message here--> 
     </div> 
     <div class="modal-footer"> 
     <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
     <button type="button" class="btn btn-primary">Save changes</button> 
     </div> 
    </div> 
    </div> 
</div> 
} 

Затем добавьте этот скрипт в index.cshtml.

$(function(){ 
if($('#myModal').length){ 
    $('#myModal').modal('show'); 
} 
}); 
+0

Как можно сделать это с помощью модального? – Ovenvan

+0

@Ovenvan вам нужно добавить '@model YourModelType' в свою точку зрения в качестве первой строки, а затем передать ту же модель в свое представление. Но я не думаю, что просто передать небольшое сообщение с использованием модели - хорошая идея. –

+0

Не модель, а модальный – Ovenvan

0

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

catch (Exception ex) 
{  
    ModelState.AddModelError(string.Empty,"Error! Try again."); 
    return View(); 
} 

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

@Html.ValidationSummary(false) 

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

Смежные вопросы