#javascript #asp.net #asp.net-mvc #asp.net-core #model-view-controller
#javascript #asp.net #asp.net-mvc #asp.net-core #модель-представление-контроллер
Вопрос:
Я работаю над ASP.NET Основное веб-приложение, в котором у меня есть таблица в моем представлении, которая отображает все запросы. каждая запись с выпадающим списком успешно заполняется всеми аналитиками из моей базы данных, поэтому менеджер может назначить аналитика из выпадающего списка, а затем одобрить запрос.
Мои вопросы:
-
Могу ли я реализовать это с помощью формы для каждой записи вместо использования JavaScript, я имею в виду использование только тегов asp?
-
Если это должно быть сделано с помощью JavaScript, вот моя попытка реализовать это. Следующий код работает, только если идентификатор аналитика является целым числом, но в моем случае идентификатор аналитика является строкой, поэтому всякий раз, когда я пытаюсь выполнить это, я получаю либо «null», либо «Ноль» для идентификатора аналитика в контроллере. Вот моя ViewModel
public class RequestViewModel
{
public IEnumerable<Request> Requests { get; set; }
public IEnumerable<ApplicationUser> AnalystList { get; set; }
public Institution Institution { get; set; }
public string selectedAnalyst { get; set; }
}
Вот мой контроллер
public async Task<IActionResult> ApproveRequest(int id, int Analystid)
{
Request Req = await _db.Request
.Include(c => c.Institution)
.FirstOrDefaultAsync(c => c.Id == id);
if (Req.Type == SD.TypeRegister)
{
Req.Institution.Status = SD.StatusApproved;
Req.Institution.ApprovalDate = DateTime.Now;
Req.Institution.Seats = Req.Seats; // new
Req.Institution.AnalystId = Analystid.ToString(); //Here I want to get the id as string
}
else if (Req.Type == SD.TypeSeat)
{
Req.Institution.Seats = Req.Seats;
}
else if (Req.Type == SD.TypeSubscription)
{
Req.Institution.Seats = Req.Seats;
Req.Institution.Status = SD.StatusApproved;
Req.Institution.ApprovalDate = DateTime.Now;
}
Req.isDone = true;
await _db.SaveChangesAsync();
return await CreateApproval(id, SD.StatusApproved);
}
Вот мое мнение
@model TestApplication.Models.ViewModels.RequestViewModel
@using TestApplication.Extensions
@{
ViewData["Title"] = "Index";
}
<div class="tab-pane fade show active" id="Register" role="tabpanel" aria-labelledby="Register-tab">
Registration Requests
<div>
@if (Model.Requests.Count() > 0)
{
<table class="table table-striped">
<tr class="table-secondary">
<th>
Institution Name
</th>
<th>
Date
</th>
<th>
Actual seat
</th>
<th>
Seats
</th>
<th>
New Seat
</th>
<th>
Choose Analyst
</th>
<th>
Accept / Reject
</th>
<th>
Details
</th>
<th>
</th>
</tr>
@foreach (var item in Model.Requests)
{
@if (item.Type == "Register" amp;amp; item.Institution.Status == "Pending") @*need one*@
{
<tr>
<td>
@Html.DisplayFor(m => item.Institution.Name)
</td>
<td>
@Html.DisplayFor(m => item.Date)
</td>
<td>
@Html.DisplayFor(m => item.Institution.Seats)
</td>
<td>
@Html.DisplayFor(m => item.ActualSeats)
</td>
<td>
@Html.DisplayFor(m => item.Seats)
</td>
<td>
<select id="selectedAnalyst_@item.Id" asp-for="selectedAnalyst" asp-items=" Model.AnalystList.ToSelectListItem(Model.selectedAnalyst)" class="form-control">
<option selected value="">--- Choose ---</option>
</select>
</td>
<td>
<a class="btn btn-info" asp-controller="Request" asp-action="ApproveRequest" asp-route-id="@item.Id"> accept </a>
<a class="btn btn-info" asp-controller="Request" asp-action="RejectRequest" asp-route-id="@item.Id"> Reject </a>
</td>
<td>
<button type="submit" class="btn btn-success anchorDetail" data-target="#modal-@item.Institution.Id" data-toggle="modal">
View Details
</button>
</td>
<td>
<div class="modal fade" id="modal-@item.Institution.Id" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog-centered modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header bg-success text-light justify-content-center">
<h5 class="modal-title">Request Details</h5>
</div>
<div class="modal-body justify-content-center" id="MyModalContent">
@await Html.PartialAsync("_RequestDetails", item)
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">إغلاق</button>
</div>
</div>
</div>
</div>
</td>
</tr>
}
}
</table>
}
else
{
<p>No Institutions Exists...</p>
}
</div>
</div>
@section scripts
{
<script>
function accept(id) {
var aid = $('#selectedAnalyst_' id).val()
location.href = "/Request/ApproveRequest?id=" id "amp;Analystid=" aid
}
var PostBackURL = '/Request/RequestDetails';
$(function () {
$(".anchorDetail").click(function () {
var $buttonClicked = $(this);
var id = $buttonClicked.attr('data-id');
$.ajax({
type: "GET",
url: PostBackURL,
contentType: "application/json; charset=utf-8",
data: { "Id": id },
cache: false,
datatype: "json",
success: function (data) {
$('#MyModalContent').html(data);
$('#myModal').modal('show');
},
error: function () {
alert("Dynamic content load failed.");
}
});
})
</script>
}
<div class="modal fade" id="MyModal" tabindex="-1" role="dialog"
aria-labelledby="myModalLabel">
<div id='MyModalContent'></div>
</div>
Ответ №1:
Если вы хотите передать @item.id и $(‘#selectedAnalyst_’ id).val() контроллеру с формой, вы можете сделать следующим образом.Вот демонстрационная работа (поместить форму за пределы выпадающего списка и кнопки):
<form method="post"
asp-controller="Request"
asp-action="ApproveRequest"
asp-route-id="@item.Id">
<td>
<select id="selectedAnalyst_@item.Id" asp-for="selectedAnalyst" class="form-control">
<option selected value="">--- Choose ---</option>
<option selected value="1">1</option>
<option selected value="2">2</option>
<option selected value="3">3</option>
</select>
</td>
<td>
<button type="submit">Accept</button>
</td>
</form>
Контроллер (измените Analystid
на selectedAnalyst
, чтобы вы могли привязывать asp-for="selectedAnalyst"
, и если вы хотите получить строковый параметр, вы можете изменить его на string selectedAnalyst
):
public IActionResult ApproveRequest(int id,string selectedAnalyst)
{
return Ok();
}