#c# #html #.net #asp.net-core #model
#c# #HTML #.net #asp.net-core #Модель
Вопрос:
например, на мой взгляд, у меня есть это:
<div class="form-group">
<label asp-for="Departamento.Departamento" class="control-label"></label>
<input name="Departamento" class="form-control" />
<span asp-validation-for="Departamento.Departamento" class="text-danger"></span>
</div>
как вы можете видеть во входных данных, у меня есть name=»Departamento», потому что в моей модели у меня есть строка Departamento..
я хочу использовать asp-for =»Departamento», но поскольку моя модель представляет собой комбинацию двух моделей, я не могу получить доступ напрямую, и это будет asp-for =»Departamentos.Departamento»… так что это дает мне неправильный текст и не будет вставляться в базу данных… любая помощь?
РЕДАКТИРОВАТЬ: мои модели:
public class Departamentos
{
public int Id { get; set; }
public string Departamento { get; set; }
public string Autor { get; set; }
public int Ordem { get; set; }
public DateTime Criado { get; set; }
public List<AreasDepartamentos> Areas { get; set; }
}
```
public class AreasDepartamentos
{
public int AreasId { get; set; }
public Areas Area { get; set; }
public int DepartamentoId { get; set; }
public Departamentos Departamento { get; set; }
}
My controller post :
´´´
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Id,Departamento,Autor,Ordem")] Departamentos departamentos, int[] areas)
{
List<AreasDepartamentos> areasLista = new List<AreasDepartamentos>();
foreach(var i in areas)
{
areasLista.Add(new AreasDepartamentos() { AreasId = i, DepartamentoId = departamentos.Id });
}
departamentos.Areas = areasLista;
departamentos.Criado = DateTime.Now;
if (ModelState.IsValid)
{
_context.Add(departamentos);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(departamentos);
}
´´´
Комментарии:
1. Это могло бы хорошо работать с помощником по тегам в моем проекте. Не могли бы вы поделиться своими моделями? И что вы использовали, mvc или razor pages? Также, пожалуйста, поделитесь, какую модель вы хотите получить в своем бэкэнде.
2. Я отредактирую вопрос с помощью рассматриваемых моделей, они, вероятно, немного сбивают с толку, поскольку я новичок в этом, но вот и все 🙂
Ответ №1:
В вашем случае, похоже, вы могли получить только имя Departamento
. asp-for="Departamentos.Departamento"
сгенерировал бы html: name="Departamentos.Departamento"
.Чтобы передать только Departmento
, вы могли бы игнорировать родительское имя в серверной части, используя [Bind(Prefix="Departamentos")]
:
[HttpPost]
public IActionResult Test([Bind(Prefix = "Departamentos")] YourModel model)
{
return View();
}
Примечание: Убедитесь, какие данные указаны в asp-for.Ваш код использует asp-for="Departamento.Departamento"
, но ваше описание является asp-for="Departamentos.Departamento"
.
Комментарии:
1. Да, это asp-for =»Departamento. Departamento». Это мое действие post: « [HttpPost] [ValidateAntiForgeryToken] общедоступная асинхронная задача<IActionResult> Создать([Привязать(«Идентификатор, Departamento, Autor, Ordem»)] Departamentos departamentos, int[] области) Я понял, зачем добавлять префикс, но тогда я не могу поместить поля в Bind перед этим, это все равно будет работать? Спасибо за помощь! 🙂
2. Я попытался удалить поля в Bind и поместить префикс, но это не сработало… Это все еще выдает мне ошибку, если я использую asp-for в представлении :/
3. Префикс привязки означает игнорирование родительского имени в серверной части вместо интерфейса. Вспомогательный тег все еще должен быть
asp-for="Departamento.Departamento"
.4. Это было идеально! Большое вам спасибо! 😀