2014-02-21 2 views
4

Наконец-то мне удалось получить обновление PartialView с помощью Ajax. Цель частичного просмотра - виджет боковой панели, который отображает содержимое регистрации и позволяет удалить элементы из регистрации.Как изящно обрабатывать обновление AJAX PartialView при отключенном Javascript

Сокращенная версия PartialView выглядит следующим образом:

<table id="item-entries"> 
    @foreach (var item in Model.Items) 
    { 
     <tr> 
      <td>@item.Name</td> 
      <td>@item.Price</td> 
      <td> 
       @using (Ajax.BeginForm("RemoveItemEntry", "Registration", new AjaxOptions { UpdateTargetId = "item-entries" })) 
       { 
        <button type="submit" name="ItemId" value="@item.ItemId">×</button> 
       } 
      </td> 
     </tr> 
    } 
</table> 

А вот сокращенный пример действия:

[HttpPost] 
public ActionResult RemoveItemEntry(ItemViewModel data) 
    { 
     // Perform logic to remove the item from the registration 
     // then return the PartialView with updated model 

     return PartialView("~/Views/Partials/ItemEntries.cshtml", model); 
    } 
} 

Это прекрасно работает в настоящее время, однако я не хочу, чтобы предложение сломанный опыт для тех, у кого JavaScript отключен. Если вы публикуете форму с отключенным JavaScript, действие все равно выполняется правильно, но вы перенаправлены на URL-адрес, который отображает PartialView и ничего больше. Я бы хотел, чтобы пользователи, у которых отключен JavaScript, перенаправляются обратно на исходную страницу, из которой была отправлена ​​форма.

Возможно ли это?

+1

'Request.IsAjaxRequest' может помочь вам решить, какой вид будет отображаться. –

ответ

2

Так у вас есть два варианта здесь:

Первый изменить способ действий на следующее:

[HttpPost] 
public ActionResult RemoveItemEntry(ItemViewModel data) 
{ 
    // Perform logic to remove the item from the registration 
    // then return the PartialView with updated model 

    if (Request.IsAjaxRequest()) 
    { 
      return PartialView("~/Views/Partials/ItemEntries.cshtml", model); 
    } 
    else 
    { 
      // return the initial View not the parial fie 
    } 
} 

Второй вариант заключается в замене вам Ajax формы с нормальным, что называют Метод действия, возвращающий исходный вид. Затем вам придется написать код jQuery, который вызывает вызов AJAX при отправке формы, но это вызовет AJAX ко второму методу, который вернет PartialView.

+1

Незначительная коррекция вашего решения, это должно быть '' 'Request.IsAjaxRequest()' '' - в вашем примере отсутствует скобка. – ProNotion

+0

Спасибо, я исправлю это. – ssimeonov

2

Мое решение выглядит следующим образом -

В intial зрения, вы можете вызвать печенье следующим образом -

<script> 
    document.cookie = "JSEnabled=1; path=/"; 
</script> 

Тогда для JS браузер с поддержкой, когда вы делаете POST, печенье будет приходить в запросе, как показано ниже -

enter image description here

И когда у вас есть JavaScript инвалидов браузеры, печенье будет аннулирована, как показано быть низкая -

enter image description here

Так на основе этого значения печенья, будь то нуль или доступны, сделать редирект или Return вида() согласно вашему требованию.

+0

Мне нравится ваше мышление, но я не знал об ошибке '' 'Request.IsAjaxRequest'' в ответе @ssimeonov, который, вероятно, является более подходящим способом выполнения проверки и обработки ответа. – ProNotion

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