Как я могу создать контроллер, который будет обрабатывать модель представления в Razor?C#

Место общения программистов C#
Ответить
Anonymous
 Как я могу создать контроллер, который будет обрабатывать модель представления в Razor?

Сообщение Anonymous »

В настоящее время я учусь создавать приложение ASP.NET Core MVC, и мне трудно понять, как на самом деле работают контроллеры и как EF обрабатывает отношения.
Сейчас у меня есть эти две таблицы:

Код: Выделить всё

public class Persona
{
public int Id { get; set; }
public string Nombre { get; set; }
public string ApellidoPaterno { get; set; }
public string ApellidoMaterno { get; set; }
public string Email { get; set; }
public string Telefono { get; set; }

// Relationship
public int? UsuarioId { get; set; }
public Usuario? Usuario { get; set; }
}

public class Usuario
{
public int Id { get; set; }
public string Username { get; set; }
public string Password { get; set; }

// Relacion
public int? PersonaId { get; set; }
[ForeignKey("PersonaId")]
public Persona? Persona { get; set; }
}
Эти две таблицы имеют отношение один к одному, и я создал модель представления, которая будет использоваться для одновременного отображения и редактирования обеих таблиц.
Это модель представления, которую я создал:

Код: Выделить всё

public class PersonaUsuarioVista
{
// Persona properties
public string Nombre { get; set; }
public string ApellidoPaterno { get; set; }
public string ApellidoMaterno { get; set; }
public string Email { get; set; }
public string Telefono { get; set; }

// Usuario properties
public string Username { get; set; }
public string Password { get; set; }
}
Это модель представления, которую я использовал для правильного отображения и создания новых персонажей и пользователей.
Но когда Дело доходит до Edit. Я не знаю, почему он не работает.
Метод Get работает правильно, то есть отображает данные внутри полей ввода.
Но как только изменение внесено и сохранено... Ничего, я не знаю, почему это так.
Это метод Post для редактирования:

Код: Выделить всё

[HttpPost]
[ValidateAntiForgeryToken]
public async Task Edit(int id, UsuarioPersonaVista.PersonaUsuarioVista model)
{
if (ModelState.IsValid)
{
var personaToUpdate = await _context.Personas.FindAsync(id);

if (personaToUpdate == null)
{
return NotFound();
}

var usuarioToUpdate = await _context.Usuarios.FirstOrDefaultAsync(u => u.PersonaId == id);

if (usuarioToUpdate == null)
{
return NotFound();
}

// Update Persona properties
personaToUpdate.Nombre = model.Nombre;
personaToUpdate.ApellidoPaterno = model.ApellidoPaterno;
personaToUpdate.ApellidoMaterno = model.ApellidoMaterno;
personaToUpdate.Email = model.Email;
personaToUpdate.Telefono = model.Telefono;

// Update Usuario properties
usuarioToUpdate.Username = model.Username;

// Save changes
_context.Usuarios.Update(usuarioToUpdate);
_context.Personas.Update(personaToUpdate);
await _context.SaveChangesAsync();

return RedirectToAction(nameof(Index));
}

return View(model); // Return the view with the model if the ModelState is invalid
}
А это сама страница Razor:

Код: Выделить всё


Nombre



Apellido Paterno



Apellido Materno



Email



Telefono



Username





Любая помощь или рекомендации по решению этой проблемы или просто лучшему пониманию того, что я сделал неправильно, очень ценю. Спасибо большое!

Подробнее здесь: https://stackoverflow.com/questions/792 ... l-in-razor
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»