Как я могу сгенерировать атрибуты имени с помощью asp -для этого игнорируйте родительский элемент?

#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. Это было идеально! Большое вам спасибо! 😀