Umesh AP Ответов: 1

Как получить доступ к родительскому элементу управления представлениями из частичного представления в MVC 4


Всем Привет,
Я занимаюсь разработкой приложения MVC4 с Поиск, разбиение на страницы и сортировку с использованием AJAX &амп; частичный вид. Параметры поиска помещаются в родительское представление (Index.cshtml), а соответствующие записи отображаются в частичном представлении (_PartialView.cshtml) при нажатии кнопки поиска.

Когда я удаляю любую запись из сетки, я хочу перезагрузить частичное представление. Я уже сделал это, используя метод returning PartialView from Delete action. Но если выбран какой-либо параметр поиска, как я могу получить доступ к этому значению в методе действия удаления?

Моя ссылка на удаление в _PartialView.cshtml

@Ajax.ActionLink("Delete", "Delete", new { SrNo = item.SrNo },
                                        new AjaxOptions { HttpMethod = "POST", Confirm = "Are you sure you want to delete record with SrNo : " + item.SrNo + "?", UpdateTargetId = "divData" }) 


В HomeController. cs

[HttpPost]
public ActionResult Delete(int SrNo)
{
List<UploadData> allUploadData;
.
.
.
return PartialView("_PartialView", allUploadData.ToPagedList(1, 100, TotalRecordsCount));  
}


Пожалуйста, предложите правильное решение.

Что я уже пробовал:

Я пробовал использовать ViewBag, ViewData и TempData. В индексном представлении я сохранил все параметры поиска в объектах ViewBag, но в представлении Partail все эти объекты ViewBag показывают нулевые значения.

Umesh AP

Мне удалось достичь той же функциональности с помощью TempData следующим образом :

Всякий раз, когда нажимается кнопка поиска, я сохраняю параметры поиска в переменных TempData как

TempData["srchByUserName"] = searchByUserName;
TempData["srchByUploadDate"] = searchByUploadDate;
TempData["currentPageIndex"] = currentPageIndex;



В действие "удалить", после прочтения этих значений использовать сохранить() метод, чтобы сохранить ценности, как :
TempData.Keep("srchByUserName");
TempData.Keep("srchByUploadDate");
TempData.Keep("currentPageIndex");


Но следующая проблема заключается в том, что всякий раз, когда я удаляю записи не с 1-й страницы, я перенаправляю их на 1-ю страницу.
Я хочу, чтобы после удаления записи со 2-й страницы обновилась только 2-я страница.

1 Ответов

Рейтинг:
1

David_Wimbley

Поэтому, если у вас есть такие изменения, как дата начала, Дата окончания и поисковый запрос, например

<input type="text" name="StartDate" id="StartDate">
<input type="text" name="EndDate" id="EndDate">
<input type="text" name="SearchTerm" id="SearchTerm">


И вы хотите получить доступ к этим значениям в вашем контроллере удаления. Вам следует настроить вашу кнопку "Удалить" срабатывает через jQuery с помощью ."Аякс" (или эквивалент).

Вы можете сделать что-то подобное в событии click вашей кнопки delete


$("#partial-div-id").on("click", ".delete-button-class", function() {
	var srNo = $(this).attr("data-srno");
	var startDate = $("#StartDate").val();
	var endDate = $("#EndDate").val();
	var searchTerm = $("#SearchTerm").val();
	
	 $.ajax({
		cache: false,
		url: '<path to="" your="" controller="" +="" action',<br="" mode="hold">		contentType: 'application/html; charset=utf-8',
		type: 'GET',
		dataType: 'html',
		data: { SrNo: srNo, StartDate: startDate, EndDate: endDate, SearchTerm: searchTerm  },
		async: false
	}).success(function (data) {
		$("#<your partial="" div="" id").html(data);<br="" mode="hold">	}).error(function () {
		// show an error message
	});

});</your></path>


Затем вы бы скорректировали свое действие в вашем contoller, чтобы иметь параметры даты начала, даты окончания и поискового запроса вместе с srno.

[HttpPost]
public ActionResult Delete(int SrNo, DateTime StartDate, DateTime EndDate, string SearchTerm)
{
List<uploaddata> allUploadData;
.
.
.
return PartialView("_PartialView", allUploadData.ToPagedList(1, 100, TotalRecordsCount));  
}</uploaddata>


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


Umesh AP

@David_Wimbley-большое вам спасибо за ответ. Я пытаюсь использовать этот подход, но есть ли у них какой-либо другой способ добиться того же самого без jQuery. Я наткнулся на ViewDataDictionary, когда искал эту проблему в Google, но не смог найти правильный способ.