Я создаю страницу билетов и хочу, чтобы пользователь добавил билеты каждому ученику. Добавление заявок выполняется в базе данных с помощью хранимой процедуры, которая принимает параметры из класса модели и таблицы базы данных, такие как имя, возраст и номер, которых нет в базе данных и модели. Проблема заключается в передаче параметра Number, который отсутствует в таблице базы данных и отсутствует в классе модели, поскольку система будет создавать заявки в соответствии с параметром Number.
Класс модели:
public class Ticket
{
[Key]
public Int64 ID { get; set; }
public Sring Name { get; set; }
public int Age { get; set; }
public Sring Address { get; set; }
[BindProperty]
public int Number{ get; set; }
}
Обратите внимание, что я добавил число в качестве свойства Bind в качестве этого решения: Передача данных из представления в контроллер asp. net страниц с базовой бритвой
Функция создания, которая должна принимать число из пользователь в контроллере
public IActionResult Create()
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("ID,Name,Age,Address,Number")] Ticket ticket)
{
if (ModelState.IsValid)
{
var Number = new SqlParameter
{
ParameterName = "@Number",
SqlDbType = System.Data.SqlDbType.Int,
Direction = System.Data.ParameterDirection.Input,
Value = ticket.Number
};
var Name = new SqlParameter
{
ParameterName = "@Name",
SqlDbType = System.Data.SqlDbType.NVarChar,
Direction = System.Data.ParameterDirection.Input,
Value = ticket.Name
};
var Age = new SqlParameter
{
ParameterName = "@Age",
SqlDbType = System.Data.SqlDbType.Int,
Direction = System.Data.ParameterDirection.Input,
Value = ticket.Age
};
_context.Database.ExecuteSqlRaw("usp_InsertTickets @Number,@Name,@Age", Number, Name,Age);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(ticket);
}
Страница просмотра
<h4>Ticket</h4>
<hr />
<div class="row">
<div class="col-md-4">
<form asp-action="Create">
<div class="form-group">
<label asp-for="Number" class="control-label"></label>
<input asp-for="Number" class="form-control" />
<span asp-validation-for="Number" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Name" class="control-label"></label>
<input asp-for="Name" class="form-control" />
<span asp-validation-for="Name" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Age" class="control-label"></label>
<input asp-for="Age" class="form-control" />
<span asp-validation-for="Age" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" />
</div>
</form>
</div>
</div>
, и это хранимая процедура:
Create PROCEDURE [dbo].[usp_InsertTickets]
@Number int
, @Name nvarchar(50)
, @Age int
AS
BEGIN
SET NONumber ON;
Declare @index int;
set @index = 0;
while @index < @Number
begin
INSERT INTO [dbo].[ut_Ticketing]
([Age]
,[Name]
)
VALUES
( @Age
, @Name
)
set @index = @index +1;
end
RETURN 0
END
Я также следовал этому решению: Как передать значение из вида в контроллер 1