У меня есть список таблиц для формы опроса, и у каждого из них есть кнопка/ASP-действие для просмотра ответов как минимум 3 конкурентов. но мне нужно выбрать конкурентов формы опроса, используя модальный. внутри этого модального окна я должен заполнить тело флажком конкурентов, которые ответили на эту форму опроса. Как я могу нажать, чтобы направить модальное переключение данных на контроллер?
Вот мой взгляд:
@for (int i = 0; i < Model.SurveyNames.Count; i++)
{
<tr>
<td>
@Model.SurveyNames[i].SurveyName
</td>
<td>
@Model.SurveyNames[i].SurveyFor
</td>
<td>
@Model.SurveyNames[i].Description
</td>
<td>
@Model.SurveyNames[i].CreatedBy
</td>
<td>
@Model.SurveyNames[i].Status
</td>
<td>
<!-- Button trigger modal -->
<a asp-action = "ViewCompetitors" asp-route-id = "@Model.SurveyNames[i].Id" data-toggle = "modal" data-target = "#ChooseCompetitors">View Competitors</a>
</td>
</tr>
}
И это мой контроллер, он должен возвращать значения модальному индексу:
public IActionResult Index(int? id)
{
var model = new CompetitorAnswerViewModel();
var SurveyList = _context.MainSurvey.ToList();
foreach (var zsurvey in SurveyList)
{
model.SurveyNames.Add(new survey { Id = zsurvey.Id, SurveyName = zsurvey.SurveyName, SurveyFor = zsurvey.SurveyFor,Description = zsurvey.Description,CreatedBy = zsurvey.CreatedBy,Status = zsurvey.Status}) ;
}
var competitorList = _context.SurveyCompetitor.ToList().Where(x => x.MainSurveyId == id);
foreach (var competitors in competitorList)
{
model.CompetitorNames.Add(new Competitor { CompetitorName = competitors.CompetitorName});
}
return View(model);
}
Я должен заполнить тело флажком конкурентов, которые ответили на эту форму опроса. Но он не перенаправляется на контроллер всякий раз, когда я нажимаю «Просмотреть конкурентов».
Привет @NevilleNazerane, всякий раз, когда я использую оператор foreach
, появляется ошибка. и я использую 1 модель из 2 таблиц базы данных.
foreach (var sname in Model.SurveyNames)
при использовании с @sname.SurveyName
и т. д. должно работать нормально
это ваш _context
dbcontext ядра ef
да. Это сработало, как вы сказали :) Спасибо! Ошибка в том, что я не вставил Model.
в Model.SurveyNames
. Ржу не могу.
если вы говорите о модальном загрузчике, это будет в вашем коде HTML/бритвы. вам не нужно было бы ничего нажимать на контроллер, чтобы создать его
Я хочу, чтобы идентификатор данных таблицы передал его контроллеру, чтобы отфильтровать конкурентов опроса, а затем вернуть отфильтрованные данные модальному в том же индексе.
I want the table data id to pass it to the contoller to filter the survey competitors and then return the filtered data to the modal in the same index
Вы можете поместить представление Competitors
в частичное представление и отобразить его в представлении Index
с помощью ajax.
1. Создайте частичный вид в Shared
папке /Views/Shared/_CompetitorsPartialView.cshtml
@model YourViewModel
<div class = "col-md-12">
Your View
</div>
2. Верните отфильтрованные данные в это частичное представление.
public IActionResult ViewCompetitors(int id)
{
// filter logic
return PartialView("_CompetitorsPartialView",YourViewModel);
}
3. Используйте ajax в представлении Index
.
Измените <a>
на <button>
:
<button id = "ViewCompetitors" onclick = "viewCompetitor(@item.CustomerId)">View Competitors</button>
Модальные и ajax:
<div class = "modal fade" id = "ChooseCompetitors" role = "dialog">
<div class = "modal-dialog">
<!-- Modal content-->
<div class = "modal-content">
<div class = "modal-header">
<h4 class = "modal-title">Modal Header</h4>
<button type = "button" class = "close" data-dismiss = "modal">×</button>
</div>
<div class = "modal-body">
<div id = "showresults"></div>
</div>
<div class = "modal-footer">
<button type = "button" class = "btn btn-default" data-dismiss = "modal">Close</button>
</div>
</div>
</div>
</div>
@section Scripts{
<script>
function viewCompetitor(id) {
$.ajax({
type: 'Get',
url: '/Home/ViewCompetitors/' + id,//your url
success: function (result) {
$("#ChooseCompetitors").modal();//open modal
$('#showresults').html(result);//populate view to modal
}
})
}
</script>
}
просто предложение, не решит проблему. код мог бы быть намного чище, если бы вы использовали
foreach
вместоfor
в первой строке.