El enlace del modelo en net core en una propiedad llamada newuserid no funciona

programación


Este es un tema muy extraño sobre el cual he estado dando vueltas durante 2 o 3 días. Estoy usando una aplicación web Net Core 6.0 MVC.

En mi modelo de vista tengo una propiedad como esta:

public class ConfirmCodeViewModel
{
...
public long NewUserId { get; set; }
...
}

El modelo se completa, se pasa a una vista y este valor se conserva en una entrada oculta dentro de un formulario, todo muy estándar:

@model ConfirmCodeViewModel
...
<form asp-action="ConfirmCode" method="post">
...
<input type="hidden" asp-for="NewUserId" />
...
</form>

Cuando se PUBLICA el formulario, NewUserId vuelve a ser cero, no hay ninguna entrada para él en los datos del formulario publicados y, por lo tanto, no está vinculado al modelo entrante.

Si cambio el nombre de la propiedad a UserId

public long UserId { get; set; }

Luego se une y regresa correctamente.

El modelo se recibe en la acción así:

public async Task<IActionResult> ConfirmCode(ConfirmCodeViewModel inputModel)

Todos los demás modelos con propiedades se vinculan correctamente.

Esto resuelve el problema, pero aún así me gustaría saber por qué no funciona con la propiedad denominada NewUserId.

Muchas gracias por cualquier aporte.

PD: Disculpas si el formato del código es un poco complicado, ¡mi incompetencia!

Lo que he probado:

He intentado cambiar el tipo a una cadena.

public string NewUserId { get; set; }

Pero eso tampoco funcionó.

He inspeccionado la colección Request.Form entrante y no se devuelve ningún elemento llamado NewUserId.

Revisé la vista para asegurarme de que no haya ningún elemento duplicado con la misma identificación.

He verificado (usando JS) que el valor ESTÁ establecido dentro de la vista.

El POST no está siendo interceptado de ninguna manera (por ejemplo, por JS).

Solución 1

En mi opinión, lo más obvio a investigar es el nombre de la propiedad que se espera en el lado del servidor de la llamada POST. Verifique si se llama o no NewUserId. Sospecho que en realidad se llama UserId y lo recoges cuando envías el valor. Si la propiedad se llama UserId y aún desea usar NewUserId localmente, siempre puede decorar la propiedad con el nombre que espera en el otro lado (este ejemplo usa NewtonSoft).

C#
[JsonProperty("UserId")]
public long NewUserid { get; set; }

コメント

タイトルとURLをコピーしました